<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><link rel="stylesheet" type="text/css" href="style.css" /><script type="text/javascript" src="highlight.js"></script></head><body><pre><span class="hs-comment">-- | Evaluation of 32 bit values.</span><span>
</span><span id="line-2"></span><span class="hs-keyword">module</span><span> </span><span class="hs-identifier">GHC.CmmToAsm.SPARC.CodeGen.Gen32</span><span> </span><span class="hs-special">(</span><span>
</span><span id="line-3"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier">getSomeReg</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-4"></span><span>        </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getRegister"><span class="hs-identifier">getRegister</span></a></span><span>
</span><span id="line-5"></span><span class="hs-special">)</span><span>
</span><span id="line-6"></span><span>
</span><span id="line-7"></span><span class="hs-keyword">where</span><span>
</span><span id="line-8"></span><span>
</span><span id="line-9"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Prelude.html"><span class="hs-identifier">GHC.Prelude</span></a></span><span>
</span><span id="line-10"></span><span>
</span><span id="line-11"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.CondCode.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.CodeGen.CondCode</span></a></span><span>
</span><span id="line-12"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Amode.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.CodeGen.Amode</span></a></span><span>
</span><span id="line-13"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.CodeGen.Gen64</span></a></span><span>
</span><span id="line-14"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.CodeGen.Base</span></a></span><span>
</span><span id="line-15"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Stack.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.Stack</span></a></span><span>
</span><span id="line-16"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Instr.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.Instr</span></a></span><span>
</span><span id="line-17"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Cond.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.Cond</span></a></span><span>
</span><span id="line-18"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.AddrMode.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.AddrMode</span></a></span><span>
</span><span id="line-19"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Imm.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.Imm</span></a></span><span>
</span><span id="line-20"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Regs.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.Regs</span></a></span><span>
</span><span id="line-21"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Base.html"><span class="hs-identifier">GHC.CmmToAsm.SPARC.Base</span></a></span><span>
</span><span id="line-22"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html"><span class="hs-identifier">GHC.CmmToAsm.Monad</span></a></span><span>
</span><span id="line-23"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Format.html"><span class="hs-identifier">GHC.CmmToAsm.Format</span></a></span><span>
</span><span id="line-24"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html"><span class="hs-identifier">GHC.Platform.Reg</span></a></span><span>
</span><span id="line-25"></span><span>
</span><span id="line-26"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.html"><span class="hs-identifier">GHC.Cmm</span></a></span><span>
</span><span id="line-27"></span><span>
</span><span id="line-28"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="../../base/src/Control.Monad.html#"><span class="hs-identifier">Control.Monad</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="../../base/src/GHC.Base.html#liftM"><span class="hs-identifier">liftM</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-29"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Data.OrdList.html"><span class="hs-identifier">GHC.Data.OrdList</span></a></span><span>
</span><span id="line-30"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Utils.Outputable.html"><span class="hs-identifier">GHC.Utils.Outputable</span></a></span><span>
</span><span id="line-31"></span><span>
</span><span id="line-32"></span><span class="hs-comment">-- | The dual to getAnyReg: compute an expression into a register, but</span><span>
</span><span id="line-33"></span><span class="hs-comment">--      we don't mind which one it is.</span><span>
</span><span id="line-34"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-type">getSomeReg</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#InstrBlock"><span class="hs-identifier hs-type">InstrBlock</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-35"></span><span id="getSomeReg"><span class="annot"><span class="annottext">getSomeReg :: CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var hs-var">getSomeReg</span></a></span></span><span> </span><span id="local-6989586621681033959"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033959"><span class="hs-identifier hs-var">expr</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-36"></span><span>  </span><span id="local-6989586621681033958"><span class="annot"><span class="annottext">Register
</span><a href="#local-6989586621681033958"><span class="hs-identifier hs-var">r</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getRegister"><span class="hs-identifier hs-var">getRegister</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033959"><span class="hs-identifier hs-var">expr</span></a></span><span>
</span><span id="line-37"></span><span>  </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Register
</span><a href="#local-6989586621681033958"><span class="hs-identifier hs-var">r</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-38"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-type">Any</span></a></span><span> </span><span id="local-6989586621681033956"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681033956"><span class="hs-identifier hs-var">rep</span></a></span></span><span> </span><span id="local-6989586621681033955"><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033955"><span class="hs-identifier hs-var">code</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-39"></span><span>        </span><span id="local-6989586621681033954"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033954"><span class="hs-identifier hs-var">tmp</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681033956"><span class="hs-identifier hs-var">rep</span></a></span><span>
</span><span id="line-40"></span><span>        </span><span class="annot"><span class="annottext">(Reg, InstrBlock) -&gt; NatM (Reg, InstrBlock)
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033954"><span class="hs-identifier hs-var">tmp</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033955"><span class="hs-identifier hs-var">code</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033954"><span class="hs-identifier hs-var">tmp</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-41"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Fixed"><span class="hs-identifier hs-type">Fixed</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681033951"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033951"><span class="hs-identifier hs-var">reg</span></a></span></span><span> </span><span id="local-6989586621681033950"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033950"><span class="hs-identifier hs-var">code</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span>
</span><span id="line-42"></span><span>        </span><span class="annot"><span class="annottext">(Reg, InstrBlock) -&gt; NatM (Reg, InstrBlock)
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033951"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033950"><span class="hs-identifier hs-var">code</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-43"></span><span>
</span><span id="line-44"></span><span>
</span><span id="line-45"></span><span>
</span><span id="line-46"></span><span class="hs-comment">-- | Make code to evaluate a 32 bit expression.</span><span>
</span><span id="line-47"></span><span class="hs-comment">--</span><span>
</span><span id="line-48"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getRegister"><span class="hs-identifier hs-type">getRegister</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Register"><span class="hs-identifier hs-type">Register</span></a></span><span>
</span><span id="line-49"></span><span>
</span><span id="line-50"></span><span id="getRegister"><span class="annot"><span class="annottext">getRegister :: CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getRegister"><span class="hs-identifier hs-var hs-var">getRegister</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmReg"><span class="hs-identifier hs-type">CmmReg</span></a></span><span> </span><span id="local-6989586621681033948"><span class="annot"><span class="annottext">CmmReg
</span><a href="#local-6989586621681033948"><span class="hs-identifier hs-var">reg</span></a></span></span><span class="hs-special">)</span><span>
</span><span id="line-51"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span> </span><span id="local-6989586621681033947"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681033947"><span class="hs-identifier hs-var">platform</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">NatM Platform
</span><a href="GHC.CmmToAsm.Monad.html#getPlatform"><span class="hs-identifier hs-var">getPlatform</span></a></span><span>
</span><span id="line-52"></span><span>       </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; InstrBlock -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Fixed"><span class="hs-identifier hs-var">Fixed</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmType -&gt; Format
</span><a href="GHC.CmmToAsm.Format.html#cmmTypeFormat"><span class="hs-identifier hs-var">cmmTypeFormat</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; CmmReg -&gt; CmmType
</span><a href="GHC.Cmm.Expr.html#cmmRegType"><span class="hs-identifier hs-var">cmmRegType</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681033947"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">CmmReg
</span><a href="#local-6989586621681033948"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-53"></span><span>                     </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; CmmReg -&gt; Reg
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#getRegisterReg"><span class="hs-identifier hs-var">getRegisterReg</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681033947"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">CmmReg
</span><a href="#local-6989586621681033948"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">InstrBlock
forall a. OrdList a
</span><a href="GHC.Data.OrdList.html#nilOL"><span class="hs-identifier hs-var">nilOL</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-54"></span><span>
</span><span id="line-55"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getRegister"><span class="hs-identifier hs-var">getRegister</span></a></span><span> </span><span id="local-6989586621681033941"><span class="annot"><span class="annottext">tree :: CmmExpr
</span><a href="#local-6989586621681033941"><span class="hs-identifier hs-var">tree</span></a></span></span><span class="hs-glyph">@</span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmRegOff"><span class="hs-identifier hs-type">CmmRegOff</span></a></span><span> </span><span class="annot"><span class="annottext">CmmReg
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span>
</span><span id="line-56"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span> </span><span id="local-6989586621681033939"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681033939"><span class="hs-identifier hs-var">platform</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">NatM Platform
</span><a href="GHC.CmmToAsm.Monad.html#getPlatform"><span class="hs-identifier hs-var">getPlatform</span></a></span><span>
</span><span id="line-57"></span><span>       </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getRegister"><span class="hs-identifier hs-var">getRegister</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; CmmExpr -&gt; CmmExpr
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#mangleIndexTree"><span class="hs-identifier hs-var">mangleIndexTree</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681033939"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033941"><span class="hs-identifier hs-var">tree</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-58"></span><span>
</span><span id="line-59"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getRegister"><span class="hs-identifier hs-var">getRegister</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmMachOp"><span class="hs-identifier hs-type">CmmMachOp</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_UU_Conv"><span class="hs-identifier hs-type">MO_UU_Conv</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W64"><span class="hs-identifier hs-var">W64</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-60"></span><span>             </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmMachOp"><span class="hs-identifier hs-type">CmmMachOp</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_U_Shr"><span class="hs-identifier hs-type">MO_U_Shr</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W64"><span class="hs-identifier hs-var">W64</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span id="local-6989586621681033932"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033932"><span class="hs-identifier hs-var">x</span></a></span></span><span class="hs-special">,</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmLit"><span class="hs-identifier hs-type">CmmLit</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmInt"><span class="hs-identifier hs-type">CmmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Integer
</span><span class="hs-number">32</span></span><span> </span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span class="hs-special">]</span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-61"></span><span>  </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#ChildCode64"><span class="hs-identifier hs-type">ChildCode64</span></a></span><span> </span><span id="local-6989586621681033928"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033928"><span class="hs-identifier hs-var">code</span></a></span></span><span> </span><span id="local-6989586621681033927"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033927"><span class="hs-identifier hs-var">rlo</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM ChildCode64
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#iselExpr64"><span class="hs-identifier hs-var">iselExpr64</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033932"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-62"></span><span>  </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">(Register -&gt; NatM Register) -&gt; Register -&gt; NatM Register
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; InstrBlock -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Fixed"><span class="hs-identifier hs-var">Fixed</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="GHC.Platform.Reg.html#getHiVRegFromLo"><span class="hs-identifier hs-var">getHiVRegFromLo</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033927"><span class="hs-identifier hs-var">rlo</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033928"><span class="hs-identifier hs-var">code</span></a></span><span>
</span><span id="line-63"></span><span>
</span><span id="line-64"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getRegister"><span class="hs-identifier hs-var">getRegister</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmMachOp"><span class="hs-identifier hs-type">CmmMachOp</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_SS_Conv"><span class="hs-identifier hs-type">MO_SS_Conv</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W64"><span class="hs-identifier hs-var">W64</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-65"></span><span>             </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmMachOp"><span class="hs-identifier hs-type">CmmMachOp</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_U_Shr"><span class="hs-identifier hs-type">MO_U_Shr</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W64"><span class="hs-identifier hs-var">W64</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span id="local-6989586621681033922"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033922"><span class="hs-identifier hs-var">x</span></a></span></span><span class="hs-special">,</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmLit"><span class="hs-identifier hs-type">CmmLit</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmInt"><span class="hs-identifier hs-type">CmmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Integer
</span><span class="hs-number">32</span></span><span> </span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span class="hs-special">]</span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-66"></span><span>  </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#ChildCode64"><span class="hs-identifier hs-type">ChildCode64</span></a></span><span> </span><span id="local-6989586621681033921"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033921"><span class="hs-identifier hs-var">code</span></a></span></span><span> </span><span id="local-6989586621681033920"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033920"><span class="hs-identifier hs-var">rlo</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM ChildCode64
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#iselExpr64"><span class="hs-identifier hs-var">iselExpr64</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033922"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-67"></span><span>  </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">(Register -&gt; NatM Register) -&gt; Register -&gt; NatM Register
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; InstrBlock -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Fixed"><span class="hs-identifier hs-var">Fixed</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Reg
</span><a href="GHC.Platform.Reg.html#getHiVRegFromLo"><span class="hs-identifier hs-var">getHiVRegFromLo</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033920"><span class="hs-identifier hs-var">rlo</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033921"><span class="hs-identifier hs-var">code</span></a></span><span>
</span><span id="line-68"></span><span>
</span><span id="line-69"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getRegister"><span class="hs-identifier hs-var">getRegister</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmMachOp"><span class="hs-identifier hs-type">CmmMachOp</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_UU_Conv"><span class="hs-identifier hs-type">MO_UU_Conv</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W64"><span class="hs-identifier hs-var">W64</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span id="local-6989586621681033919"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033919"><span class="hs-identifier hs-var">x</span></a></span></span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-70"></span><span>  </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#ChildCode64"><span class="hs-identifier hs-type">ChildCode64</span></a></span><span> </span><span id="local-6989586621681033918"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033918"><span class="hs-identifier hs-var">code</span></a></span></span><span> </span><span id="local-6989586621681033917"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033917"><span class="hs-identifier hs-var">rlo</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM ChildCode64
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#iselExpr64"><span class="hs-identifier hs-var">iselExpr64</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033919"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-71"></span><span>  </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">(Register -&gt; NatM Register) -&gt; Register -&gt; NatM Register
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; InstrBlock -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Fixed"><span class="hs-identifier hs-var">Fixed</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033917"><span class="hs-identifier hs-var">rlo</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033918"><span class="hs-identifier hs-var">code</span></a></span><span>
</span><span id="line-72"></span><span>
</span><span id="line-73"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getRegister"><span class="hs-identifier hs-var">getRegister</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmMachOp"><span class="hs-identifier hs-type">CmmMachOp</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_SS_Conv"><span class="hs-identifier hs-type">MO_SS_Conv</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W64"><span class="hs-identifier hs-var">W64</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span id="local-6989586621681033916"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033916"><span class="hs-identifier hs-var">x</span></a></span></span><span class="hs-special">]</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-74"></span><span>  </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#ChildCode64"><span class="hs-identifier hs-type">ChildCode64</span></a></span><span> </span><span id="local-6989586621681033915"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033915"><span class="hs-identifier hs-var">code</span></a></span></span><span> </span><span id="local-6989586621681033914"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033914"><span class="hs-identifier hs-var">rlo</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM ChildCode64
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen64.html#iselExpr64"><span class="hs-identifier hs-var">iselExpr64</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033916"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-75"></span><span>  </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="annot"><span class="annottext">(Register -&gt; NatM Register) -&gt; Register -&gt; NatM Register
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; InstrBlock -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Fixed"><span class="hs-identifier hs-var">Fixed</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033914"><span class="hs-identifier hs-var">rlo</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033915"><span class="hs-identifier hs-var">code</span></a></span><span>
</span><span id="line-76"></span><span>
</span><span id="line-77"></span><span>
</span><span id="line-78"></span><span class="hs-comment">-- Load a literal float into a float register.</span><span>
</span><span id="line-79"></span><span class="hs-comment">--      The actual literal is stored in a new data area, and we load it</span><span>
</span><span id="line-80"></span><span class="hs-comment">--      at runtime.</span><span>
</span><span id="line-81"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getRegister"><span class="hs-identifier hs-var">getRegister</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmLit"><span class="hs-identifier hs-type">CmmLit</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmFloat"><span class="hs-identifier hs-type">CmmFloat</span></a></span><span> </span><span id="local-6989586621681033912"><span class="annot"><span class="annottext">Rational
</span><a href="#local-6989586621681033912"><span class="hs-identifier hs-var">f</span></a></span></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-82"></span><span>
</span><span id="line-83"></span><span>    </span><span class="hs-comment">-- a label for the new data area</span><span>
</span><span id="line-84"></span><span>    </span><span id="local-6989586621681033911"><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681033911"><span class="hs-identifier hs-var">lbl</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">NatM CLabel
</span><a href="GHC.CmmToAsm.Monad.html#getNewLabelNat"><span class="hs-identifier hs-var">getNewLabelNat</span></a></span><span>
</span><span id="line-85"></span><span>    </span><span id="local-6989586621681033909"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033909"><span class="hs-identifier hs-var">tmp</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>
</span><span id="line-86"></span><span>
</span><span id="line-87"></span><span>    </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681033908"><span class="annot"><span class="annottext">code :: Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033908"><span class="hs-identifier hs-var hs-var">code</span></a></span></span><span> </span><span id="local-6989586621681033907"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033907"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span> </span><span class="hs-special">[</span><span>
</span><span id="line-88"></span><span>            </span><span class="hs-comment">-- the data area</span><span>
</span><span id="line-89"></span><span>            </span><span class="annot"><span class="annottext">Section -&gt; RawCmmStatics -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#LDATA"><span class="hs-identifier hs-var">LDATA</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">SectionType -&gt; CLabel -&gt; Section
</span><a href="GHC.Cmm.html#Section"><span class="hs-identifier hs-var">Section</span></a></span><span> </span><span class="annot"><span class="annottext">SectionType
</span><a href="GHC.Cmm.html#ReadOnlyData"><span class="hs-identifier hs-var">ReadOnlyData</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681033911"><span class="hs-identifier hs-var">lbl</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">(RawCmmStatics -&gt; Instr) -&gt; RawCmmStatics -&gt; Instr
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel -&gt; [CmmStatic] -&gt; RawCmmStatics
forall (rawOnly :: Bool).
CLabel -&gt; [CmmStatic] -&gt; GenCmmStatics rawOnly
</span><a href="GHC.Cmm.html#CmmStaticsRaw"><span class="hs-identifier hs-var">CmmStaticsRaw</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681033911"><span class="hs-identifier hs-var">lbl</span></a></span><span>
</span><span id="line-90"></span><span>                         </span><span class="hs-special">[</span><span class="annot"><span class="annottext">CmmLit -&gt; CmmStatic
</span><a href="GHC.Cmm.html#CmmStaticLit"><span class="hs-identifier hs-var">CmmStaticLit</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Rational -&gt; Width -&gt; CmmLit
</span><a href="GHC.Cmm.Expr.html#CmmFloat"><span class="hs-identifier hs-var">CmmFloat</span></a></span><span> </span><span class="annot"><span class="annottext">Rational
</span><a href="#local-6989586621681033912"><span class="hs-identifier hs-var">f</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span class="hs-special">)</span><span class="hs-special">]</span><span class="hs-special">,</span><span>
</span><span id="line-91"></span><span>
</span><span id="line-92"></span><span>            </span><span class="hs-comment">-- load the literal</span><span>
</span><span id="line-93"></span><span>            </span><span class="annot"><span class="annottext">Imm -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SETHI"><span class="hs-identifier hs-var">SETHI</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#HI"><span class="hs-identifier hs-var">HI</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CLabel -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmCLbl"><span class="hs-identifier hs-var">ImmCLbl</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681033911"><span class="hs-identifier hs-var">lbl</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033909"><span class="hs-identifier hs-var">tmp</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-94"></span><span>            </span><span class="annot"><span class="annottext">Format -&gt; AddrMode -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#LD"><span class="hs-identifier hs-var">LD</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Imm -&gt; AddrMode
</span><a href="GHC.CmmToAsm.SPARC.AddrMode.html#AddrRegImm"><span class="hs-identifier hs-var">AddrRegImm</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033909"><span class="hs-identifier hs-var">tmp</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#LO"><span class="hs-identifier hs-var">LO</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CLabel -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmCLbl"><span class="hs-identifier hs-var">ImmCLbl</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681033911"><span class="hs-identifier hs-var">lbl</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033907"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-95"></span><span>
</span><span id="line-96"></span><span>    </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; InstrBlock) -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-var">Any</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF32"><span class="hs-identifier hs-var">FF32</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033908"><span class="hs-identifier hs-var">code</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-97"></span><span>
</span><span id="line-98"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getRegister"><span class="hs-identifier hs-var">getRegister</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmLit"><span class="hs-identifier hs-type">CmmLit</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmFloat"><span class="hs-identifier hs-type">CmmFloat</span></a></span><span> </span><span id="local-6989586621681033893"><span class="annot"><span class="annottext">Rational
</span><a href="#local-6989586621681033893"><span class="hs-identifier hs-var">d</span></a></span></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W64"><span class="hs-identifier hs-var">W64</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-99"></span><span>    </span><span id="local-6989586621681033892"><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681033892"><span class="hs-identifier hs-var">lbl</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">NatM CLabel
</span><a href="GHC.CmmToAsm.Monad.html#getNewLabelNat"><span class="hs-identifier hs-var">getNewLabelNat</span></a></span><span>
</span><span id="line-100"></span><span>    </span><span id="local-6989586621681033891"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033891"><span class="hs-identifier hs-var">tmp</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>
</span><span id="line-101"></span><span>    </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681033890"><span class="annot"><span class="annottext">code :: Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033890"><span class="hs-identifier hs-var hs-var">code</span></a></span></span><span> </span><span id="local-6989586621681033889"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033889"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span> </span><span class="hs-special">[</span><span>
</span><span id="line-102"></span><span>            </span><span class="annot"><span class="annottext">Section -&gt; RawCmmStatics -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#LDATA"><span class="hs-identifier hs-var">LDATA</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">SectionType -&gt; CLabel -&gt; Section
</span><a href="GHC.Cmm.html#Section"><span class="hs-identifier hs-var">Section</span></a></span><span> </span><span class="annot"><span class="annottext">SectionType
</span><a href="GHC.Cmm.html#ReadOnlyData"><span class="hs-identifier hs-var">ReadOnlyData</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681033892"><span class="hs-identifier hs-var">lbl</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">(RawCmmStatics -&gt; Instr) -&gt; RawCmmStatics -&gt; Instr
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel -&gt; [CmmStatic] -&gt; RawCmmStatics
forall (rawOnly :: Bool).
CLabel -&gt; [CmmStatic] -&gt; GenCmmStatics rawOnly
</span><a href="GHC.Cmm.html#CmmStaticsRaw"><span class="hs-identifier hs-var">CmmStaticsRaw</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681033892"><span class="hs-identifier hs-var">lbl</span></a></span><span>
</span><span id="line-103"></span><span>                         </span><span class="hs-special">[</span><span class="annot"><span class="annottext">CmmLit -&gt; CmmStatic
</span><a href="GHC.Cmm.html#CmmStaticLit"><span class="hs-identifier hs-var">CmmStaticLit</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Rational -&gt; Width -&gt; CmmLit
</span><a href="GHC.Cmm.Expr.html#CmmFloat"><span class="hs-identifier hs-var">CmmFloat</span></a></span><span> </span><span class="annot"><span class="annottext">Rational
</span><a href="#local-6989586621681033893"><span class="hs-identifier hs-var">d</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W64"><span class="hs-identifier hs-var">W64</span></a></span><span class="hs-special">)</span><span class="hs-special">]</span><span class="hs-special">,</span><span>
</span><span id="line-104"></span><span>            </span><span class="annot"><span class="annottext">Imm -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SETHI"><span class="hs-identifier hs-var">SETHI</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#HI"><span class="hs-identifier hs-var">HI</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CLabel -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmCLbl"><span class="hs-identifier hs-var">ImmCLbl</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681033892"><span class="hs-identifier hs-var">lbl</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033891"><span class="hs-identifier hs-var">tmp</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-105"></span><span>            </span><span class="annot"><span class="annottext">Format -&gt; AddrMode -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#LD"><span class="hs-identifier hs-var">LD</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II64"><span class="hs-identifier hs-var">II64</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; Imm -&gt; AddrMode
</span><a href="GHC.CmmToAsm.SPARC.AddrMode.html#AddrRegImm"><span class="hs-identifier hs-var">AddrRegImm</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033891"><span class="hs-identifier hs-var">tmp</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#LO"><span class="hs-identifier hs-var">LO</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CLabel -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmCLbl"><span class="hs-identifier hs-var">ImmCLbl</span></a></span><span> </span><span class="annot"><span class="annottext">CLabel
</span><a href="#local-6989586621681033892"><span class="hs-identifier hs-var">lbl</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033889"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-106"></span><span>    </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; InstrBlock) -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-var">Any</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF64"><span class="hs-identifier hs-var">FF64</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033890"><span class="hs-identifier hs-var">code</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-107"></span><span>
</span><span id="line-108"></span><span>
</span><span id="line-109"></span><span class="hs-comment">-- Unary machine ops</span><span>
</span><span id="line-110"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getRegister"><span class="hs-identifier hs-var">getRegister</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmMachOp"><span class="hs-identifier hs-type">CmmMachOp</span></a></span><span> </span><span id="local-6989586621681033886"><span class="annot"><span class="annottext">MachOp
</span><a href="#local-6989586621681033886"><span class="hs-identifier hs-var">mop</span></a></span></span><span> </span><span class="hs-special">[</span><span id="local-6989586621681033885"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033885"><span class="hs-identifier hs-var">x</span></a></span></span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-111"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">MachOp
</span><a href="#local-6989586621681033886"><span class="hs-identifier hs-var">mop</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-112"></span><span>        </span><span class="hs-comment">-- Floating point negation -------------------------</span><span>
</span><span id="line-113"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_F_Neg"><span class="hs-identifier hs-type">MO_F_Neg</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span>            </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; Reg -&gt; Instr) -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialUFCode"><span class="hs-identifier hs-var">trivialUFCode</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF32"><span class="hs-identifier hs-var">FF32</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#FNEG"><span class="hs-identifier hs-var">FNEG</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF32"><span class="hs-identifier hs-var">FF32</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033885"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-114"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_F_Neg"><span class="hs-identifier hs-type">MO_F_Neg</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W64"><span class="hs-identifier hs-var">W64</span></a></span><span>            </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; Reg -&gt; Instr) -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialUFCode"><span class="hs-identifier hs-var">trivialUFCode</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF64"><span class="hs-identifier hs-var">FF64</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#FNEG"><span class="hs-identifier hs-var">FNEG</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF64"><span class="hs-identifier hs-var">FF64</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033885"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-115"></span><span>
</span><span id="line-116"></span><span>
</span><span id="line-117"></span><span>        </span><span class="hs-comment">-- Integer negation --------------------------------</span><span>
</span><span id="line-118"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_S_Neg"><span class="hs-identifier hs-type">MO_S_Neg</span></a></span><span> </span><span id="local-6989586621681033880"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033880"><span class="hs-identifier hs-var">rep</span></a></span></span><span>            </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; (RI -&gt; Reg -&gt; Instr) -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialUCode"><span class="hs-identifier hs-var">trivialUCode</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width -&gt; Format
</span><a href="GHC.CmmToAsm.Format.html#intFormat"><span class="hs-identifier hs-var">intFormat</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033880"><span class="hs-identifier hs-var">rep</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Bool -&gt; Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SUB"><span class="hs-identifier hs-var">SUB</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033885"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-119"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_Not"><span class="hs-identifier hs-type">MO_Not</span></a></span><span> </span><span id="local-6989586621681033874"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033874"><span class="hs-identifier hs-var">rep</span></a></span></span><span>              </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; (RI -&gt; Reg -&gt; Instr) -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialUCode"><span class="hs-identifier hs-var">trivialUCode</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width -&gt; Format
</span><a href="GHC.CmmToAsm.Format.html#intFormat"><span class="hs-identifier hs-var">intFormat</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033874"><span class="hs-identifier hs-var">rep</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#XNOR"><span class="hs-identifier hs-var">XNOR</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033885"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-120"></span><span>
</span><span id="line-121"></span><span>
</span><span id="line-122"></span><span>        </span><span class="hs-comment">-- Float word size conversion ----------------------</span><span>
</span><span id="line-123"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_FF_Conv"><span class="hs-identifier hs-type">MO_FF_Conv</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W64"><span class="hs-identifier hs-var">W64</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span>      </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#coerceDbl2Flt"><span class="hs-identifier hs-var">coerceDbl2Flt</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033885"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-124"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_FF_Conv"><span class="hs-identifier hs-type">MO_FF_Conv</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W64"><span class="hs-identifier hs-var">W64</span></a></span><span>      </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#coerceFlt2Dbl"><span class="hs-identifier hs-var">coerceFlt2Dbl</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033885"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-125"></span><span>
</span><span id="line-126"></span><span>
</span><span id="line-127"></span><span>        </span><span class="hs-comment">-- Float &lt;-&gt; Signed Int conversion -----------------</span><span>
</span><span id="line-128"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_FS_Conv"><span class="hs-identifier hs-type">MO_FS_Conv</span></a></span><span> </span><span id="local-6989586621681033868"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033868"><span class="hs-identifier hs-var">from</span></a></span></span><span> </span><span id="local-6989586621681033867"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033867"><span class="hs-identifier hs-var">to</span></a></span></span><span>      </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Width -&gt; Width -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#coerceFP2Int"><span class="hs-identifier hs-var">coerceFP2Int</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033868"><span class="hs-identifier hs-var">from</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033867"><span class="hs-identifier hs-var">to</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033885"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-129"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_SF_Conv"><span class="hs-identifier hs-type">MO_SF_Conv</span></a></span><span> </span><span id="local-6989586621681033864"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033864"><span class="hs-identifier hs-var">from</span></a></span></span><span> </span><span id="local-6989586621681033863"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033863"><span class="hs-identifier hs-var">to</span></a></span></span><span>      </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Width -&gt; Width -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#coerceInt2FP"><span class="hs-identifier hs-var">coerceInt2FP</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033864"><span class="hs-identifier hs-var">from</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033863"><span class="hs-identifier hs-var">to</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033885"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-130"></span><span>
</span><span id="line-131"></span><span>
</span><span id="line-132"></span><span>        </span><span class="hs-comment">-- Unsigned integer word size conversions ----------</span><span>
</span><span id="line-133"></span><span>
</span><span id="line-134"></span><span>        </span><span class="hs-comment">-- If it's the same size, then nothing needs to be done.</span><span>
</span><span id="line-135"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_UU_Conv"><span class="hs-identifier hs-type">MO_UU_Conv</span></a></span><span> </span><span id="local-6989586621681033861"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033861"><span class="hs-identifier hs-var">from</span></a></span></span><span> </span><span id="local-6989586621681033860"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033860"><span class="hs-identifier hs-var">to</span></a></span></span><span>
</span><span id="line-136"></span><span>         </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033861"><span class="hs-identifier hs-var">from</span></a></span><span> </span><span class="annot"><span class="annottext">Width -&gt; Width -&gt; Bool
forall a. Eq a =&gt; a -&gt; a -&gt; Bool
</span><span class="hs-operator hs-var">==</span></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033860"><span class="hs-identifier hs-var">to</span></a></span><span>           </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#conversionNop"><span class="hs-identifier hs-var">conversionNop</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width -&gt; Format
</span><a href="GHC.CmmToAsm.Format.html#intFormat"><span class="hs-identifier hs-var">intFormat</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033860"><span class="hs-identifier hs-var">to</span></a></span><span class="hs-special">)</span><span>  </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033885"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-137"></span><span>
</span><span id="line-138"></span><span>        </span><span class="hs-comment">-- To narrow an unsigned word, mask out the high bits to simulate what would</span><span>
</span><span id="line-139"></span><span>        </span><span class="hs-comment">--      happen if we copied the value into a smaller register.</span><span>
</span><span id="line-140"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_UU_Conv"><span class="hs-identifier hs-type">MO_UU_Conv</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W16"><span class="hs-identifier hs-var">W16</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W8"><span class="hs-identifier hs-var">W8</span></a></span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Width
-&gt; (Reg -&gt; RI -&gt; Reg -&gt; Instr)
-&gt; CmmExpr
-&gt; CmmExpr
-&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialCode"><span class="hs-identifier hs-var">trivialCode</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W8"><span class="hs-identifier hs-var">W8</span></a></span><span>  </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#AND"><span class="hs-identifier hs-var">AND</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033885"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmLit -&gt; CmmExpr
</span><a href="GHC.Cmm.Expr.html#CmmLit"><span class="hs-identifier hs-var">CmmLit</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Integer -&gt; Width -&gt; CmmLit
</span><a href="GHC.Cmm.Expr.html#CmmInt"><span class="hs-identifier hs-var">CmmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Integer
</span><span class="hs-number">255</span></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W8"><span class="hs-identifier hs-var">W8</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-141"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_UU_Conv"><span class="hs-identifier hs-type">MO_UU_Conv</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W8"><span class="hs-identifier hs-var">W8</span></a></span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Width
-&gt; (Reg -&gt; RI -&gt; Reg -&gt; Instr)
-&gt; CmmExpr
-&gt; CmmExpr
-&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialCode"><span class="hs-identifier hs-var">trivialCode</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W8"><span class="hs-identifier hs-var">W8</span></a></span><span>  </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#AND"><span class="hs-identifier hs-var">AND</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033885"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmLit -&gt; CmmExpr
</span><a href="GHC.Cmm.Expr.html#CmmLit"><span class="hs-identifier hs-var">CmmLit</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Integer -&gt; Width -&gt; CmmLit
</span><a href="GHC.Cmm.Expr.html#CmmInt"><span class="hs-identifier hs-var">CmmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Integer
</span><span class="hs-number">255</span></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W8"><span class="hs-identifier hs-var">W8</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-142"></span><span>
</span><span id="line-143"></span><span>        </span><span class="hs-comment">-- for narrowing 32 bit to 16 bit, don't use a literal mask value like the W16-&gt;W8</span><span>
</span><span id="line-144"></span><span>        </span><span class="hs-comment">--      case because the only way we can load it is via SETHI, which needs 2 ops.</span><span>
</span><span id="line-145"></span><span>        </span><span class="hs-comment">--      Do some shifts to chop out the high bits instead.</span><span>
</span><span id="line-146"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_UU_Conv"><span class="hs-identifier hs-type">MO_UU_Conv</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W16"><span class="hs-identifier hs-var">W16</span></a></span><span>
</span><span id="line-147"></span><span>         </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-keyword">do</span><span>  </span><span id="local-6989586621681033854"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033854"><span class="hs-identifier hs-var">tmpReg</span></a></span></span><span>          </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>
</span><span id="line-148"></span><span>                </span><span class="hs-special">(</span><span id="local-6989586621681033853"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033853"><span class="hs-identifier hs-var">xReg</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033852"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033852"><span class="hs-identifier hs-var">xCode</span></a></span></span><span class="hs-special">)</span><span>   </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033885"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-149"></span><span>                </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681033851"><span class="annot"><span class="annottext">code :: Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033851"><span class="hs-identifier hs-var hs-var">code</span></a></span></span><span> </span><span id="local-6989586621681033850"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033850"><span class="hs-identifier hs-var">dst</span></a></span></span><span>
</span><span id="line-150"></span><span>                        </span><span class="hs-glyph">=</span><span>       </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033852"><span class="hs-identifier hs-var">xCode</span></a></span><span>
</span><span id="line-151"></span><span>                        </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span>
</span><span id="line-152"></span><span>                                </span><span class="hs-special">[</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SLL"><span class="hs-identifier hs-var">SLL</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033853"><span class="hs-identifier hs-var">xReg</span></a></span><span>   </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIImm"><span class="hs-identifier hs-var">RIImm</span></a></span><span> </span><span class="annot"><span class="annottext">(Imm -&gt; RI) -&gt; Imm -&gt; RI
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">16</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033854"><span class="hs-identifier hs-var">tmpReg</span></a></span><span>
</span><span id="line-153"></span><span>                                </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SRL"><span class="hs-identifier hs-var">SRL</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033854"><span class="hs-identifier hs-var">tmpReg</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIImm"><span class="hs-identifier hs-var">RIImm</span></a></span><span> </span><span class="annot"><span class="annottext">(Imm -&gt; RI) -&gt; Imm -&gt; RI
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">16</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033850"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-154"></span><span>
</span><span id="line-155"></span><span>                </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span>  </span><span class="annot"><span class="annottext">(Register -&gt; NatM Register) -&gt; Register -&gt; NatM Register
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; InstrBlock) -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-var">Any</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033851"><span class="hs-identifier hs-var">code</span></a></span><span>
</span><span id="line-156"></span><span>
</span><span id="line-157"></span><span>                </span><span class="hs-comment">--       trivialCode W16 (AND False) x (CmmLit (CmmInt 65535 W16))</span><span>
</span><span id="line-158"></span><span>
</span><span id="line-159"></span><span>        </span><span class="hs-comment">-- To widen an unsigned word we don't have to do anything.</span><span>
</span><span id="line-160"></span><span>        </span><span class="hs-comment">--      Just leave it in the same register and mark the result as the new size.</span><span>
</span><span id="line-161"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_UU_Conv"><span class="hs-identifier hs-type">MO_UU_Conv</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W8"><span class="hs-identifier hs-var">W8</span></a></span><span>  </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W16"><span class="hs-identifier hs-var">W16</span></a></span><span>      </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#conversionNop"><span class="hs-identifier hs-var">conversionNop</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width -&gt; Format
</span><a href="GHC.CmmToAsm.Format.html#intFormat"><span class="hs-identifier hs-var">intFormat</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W16"><span class="hs-identifier hs-var">W16</span></a></span><span class="hs-special">)</span><span>  </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033885"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-162"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_UU_Conv"><span class="hs-identifier hs-type">MO_UU_Conv</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W8"><span class="hs-identifier hs-var">W8</span></a></span><span>  </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span>      </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#conversionNop"><span class="hs-identifier hs-var">conversionNop</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width -&gt; Format
</span><a href="GHC.CmmToAsm.Format.html#intFormat"><span class="hs-identifier hs-var">intFormat</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span class="hs-special">)</span><span>  </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033885"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-163"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_UU_Conv"><span class="hs-identifier hs-type">MO_UU_Conv</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W16"><span class="hs-identifier hs-var">W16</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span>      </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Format -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#conversionNop"><span class="hs-identifier hs-var">conversionNop</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width -&gt; Format
</span><a href="GHC.CmmToAsm.Format.html#intFormat"><span class="hs-identifier hs-var">intFormat</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span class="hs-special">)</span><span>  </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033885"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-164"></span><span>
</span><span id="line-165"></span><span>
</span><span id="line-166"></span><span>        </span><span class="hs-comment">-- Signed integer word size conversions ------------</span><span>
</span><span id="line-167"></span><span>
</span><span id="line-168"></span><span>        </span><span class="hs-comment">-- Mask out high bits when narrowing them</span><span>
</span><span id="line-169"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_SS_Conv"><span class="hs-identifier hs-type">MO_SS_Conv</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W16"><span class="hs-identifier hs-var">W16</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W8"><span class="hs-identifier hs-var">W8</span></a></span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Width
-&gt; (Reg -&gt; RI -&gt; Reg -&gt; Instr)
-&gt; CmmExpr
-&gt; CmmExpr
-&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialCode"><span class="hs-identifier hs-var">trivialCode</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W8"><span class="hs-identifier hs-var">W8</span></a></span><span>  </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#AND"><span class="hs-identifier hs-var">AND</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033885"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmLit -&gt; CmmExpr
</span><a href="GHC.Cmm.Expr.html#CmmLit"><span class="hs-identifier hs-var">CmmLit</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Integer -&gt; Width -&gt; CmmLit
</span><a href="GHC.Cmm.Expr.html#CmmInt"><span class="hs-identifier hs-var">CmmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Integer
</span><span class="hs-number">255</span></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W8"><span class="hs-identifier hs-var">W8</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-170"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_SS_Conv"><span class="hs-identifier hs-type">MO_SS_Conv</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W8"><span class="hs-identifier hs-var">W8</span></a></span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Width
-&gt; (Reg -&gt; RI -&gt; Reg -&gt; Instr)
-&gt; CmmExpr
-&gt; CmmExpr
-&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialCode"><span class="hs-identifier hs-var">trivialCode</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W8"><span class="hs-identifier hs-var">W8</span></a></span><span>  </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#AND"><span class="hs-identifier hs-var">AND</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033885"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmLit -&gt; CmmExpr
</span><a href="GHC.Cmm.Expr.html#CmmLit"><span class="hs-identifier hs-var">CmmLit</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Integer -&gt; Width -&gt; CmmLit
</span><a href="GHC.Cmm.Expr.html#CmmInt"><span class="hs-identifier hs-var">CmmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Integer
</span><span class="hs-number">255</span></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W8"><span class="hs-identifier hs-var">W8</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-171"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_SS_Conv"><span class="hs-identifier hs-type">MO_SS_Conv</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W16"><span class="hs-identifier hs-var">W16</span></a></span><span>      </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Width
-&gt; (Reg -&gt; RI -&gt; Reg -&gt; Instr)
-&gt; CmmExpr
-&gt; CmmExpr
-&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialCode"><span class="hs-identifier hs-var">trivialCode</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W16"><span class="hs-identifier hs-var">W16</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#AND"><span class="hs-identifier hs-var">AND</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033885"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmLit -&gt; CmmExpr
</span><a href="GHC.Cmm.Expr.html#CmmLit"><span class="hs-identifier hs-var">CmmLit</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Integer -&gt; Width -&gt; CmmLit
</span><a href="GHC.Cmm.Expr.html#CmmInt"><span class="hs-identifier hs-var">CmmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Integer
</span><span class="hs-number">65535</span></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W16"><span class="hs-identifier hs-var">W16</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-172"></span><span>
</span><span id="line-173"></span><span>        </span><span class="hs-comment">-- Sign extend signed words when widening them.</span><span>
</span><span id="line-174"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_SS_Conv"><span class="hs-identifier hs-type">MO_SS_Conv</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W8"><span class="hs-identifier hs-var">W8</span></a></span><span>  </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W16"><span class="hs-identifier hs-var">W16</span></a></span><span>      </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Width -&gt; Width -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#integerExtend"><span class="hs-identifier hs-var">integerExtend</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W8"><span class="hs-identifier hs-var">W8</span></a></span><span>  </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W16"><span class="hs-identifier hs-var">W16</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033885"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-175"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_SS_Conv"><span class="hs-identifier hs-type">MO_SS_Conv</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W8"><span class="hs-identifier hs-var">W8</span></a></span><span>  </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span>      </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Width -&gt; Width -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#integerExtend"><span class="hs-identifier hs-var">integerExtend</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W8"><span class="hs-identifier hs-var">W8</span></a></span><span>  </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033885"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-176"></span><span>        </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_SS_Conv"><span class="hs-identifier hs-type">MO_SS_Conv</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W16"><span class="hs-identifier hs-var">W16</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span>      </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Width -&gt; Width -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#integerExtend"><span class="hs-identifier hs-var">integerExtend</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W16"><span class="hs-identifier hs-var">W16</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033885"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-177"></span><span>
</span><span id="line-178"></span><span>        </span><span class="annot"><span class="annottext">MachOp
</span><span class="hs-identifier">_</span></span><span>                       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; NatM Register
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;Unknown unary mach op: &quot;</span></span><span> </span><span class="annot"><span class="annottext">String -&gt; String -&gt; String
forall a. [a] -&gt; [a] -&gt; [a]
</span><a href="../../base/src/GHC.Base.html#%2B%2B"><span class="hs-operator hs-var">++</span></a></span><span> </span><span class="annot"><span class="annottext">MachOp -&gt; String
forall a. Show a =&gt; a -&gt; String
</span><a href="../../base/src/GHC.Show.html#show"><span class="hs-identifier hs-var">show</span></a></span><span> </span><span class="annot"><span class="annottext">MachOp
</span><a href="#local-6989586621681033886"><span class="hs-identifier hs-var">mop</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-179"></span><span>
</span><span id="line-180"></span><span>
</span><span id="line-181"></span><span class="hs-comment">-- Binary machine ops</span><span>
</span><span id="line-182"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getRegister"><span class="hs-identifier hs-var">getRegister</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmMachOp"><span class="hs-identifier hs-type">CmmMachOp</span></a></span><span> </span><span id="local-6989586621681033841"><span class="annot"><span class="annottext">MachOp
</span><a href="#local-6989586621681033841"><span class="hs-identifier hs-var">mop</span></a></span></span><span> </span><span class="hs-special">[</span><span id="local-6989586621681033840"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033839"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span></span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-183"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">MachOp
</span><a href="#local-6989586621681033841"><span class="hs-identifier hs-var">mop</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-184"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_Eq"><span class="hs-identifier hs-type">MO_Eq</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span>           </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condIntReg"><span class="hs-identifier hs-var">condIntReg</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#EQQ"><span class="hs-identifier hs-var">EQQ</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-185"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_Ne"><span class="hs-identifier hs-type">MO_Ne</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span>           </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condIntReg"><span class="hs-identifier hs-var">condIntReg</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#NE"><span class="hs-identifier hs-var">NE</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-186"></span><span>
</span><span id="line-187"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_S_Gt"><span class="hs-identifier hs-type">MO_S_Gt</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span>         </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condIntReg"><span class="hs-identifier hs-var">condIntReg</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#GTT"><span class="hs-identifier hs-var">GTT</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-188"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_S_Ge"><span class="hs-identifier hs-type">MO_S_Ge</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span>         </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condIntReg"><span class="hs-identifier hs-var">condIntReg</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#GE"><span class="hs-identifier hs-var">GE</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-189"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_S_Lt"><span class="hs-identifier hs-type">MO_S_Lt</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span>         </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condIntReg"><span class="hs-identifier hs-var">condIntReg</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#LTT"><span class="hs-identifier hs-var">LTT</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-190"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_S_Le"><span class="hs-identifier hs-type">MO_S_Le</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span>         </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condIntReg"><span class="hs-identifier hs-var">condIntReg</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#LE"><span class="hs-identifier hs-var">LE</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-191"></span><span>
</span><span id="line-192"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_U_Gt"><span class="hs-identifier hs-type">MO_U_Gt</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condIntReg"><span class="hs-identifier hs-var">condIntReg</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#GU"><span class="hs-identifier hs-var">GU</span></a></span><span>  </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-193"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_U_Ge"><span class="hs-identifier hs-type">MO_U_Ge</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condIntReg"><span class="hs-identifier hs-var">condIntReg</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#GEU"><span class="hs-identifier hs-var">GEU</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-194"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_U_Lt"><span class="hs-identifier hs-type">MO_U_Lt</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condIntReg"><span class="hs-identifier hs-var">condIntReg</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#LU"><span class="hs-identifier hs-var">LU</span></a></span><span>  </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-195"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_U_Le"><span class="hs-identifier hs-type">MO_U_Le</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condIntReg"><span class="hs-identifier hs-var">condIntReg</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#LEU"><span class="hs-identifier hs-var">LEU</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-196"></span><span>
</span><span id="line-197"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_U_Gt"><span class="hs-identifier hs-type">MO_U_Gt</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W16"><span class="hs-identifier hs-var">W16</span></a></span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condIntReg"><span class="hs-identifier hs-var">condIntReg</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#GU"><span class="hs-identifier hs-var">GU</span></a></span><span>  </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-198"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_U_Ge"><span class="hs-identifier hs-type">MO_U_Ge</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W16"><span class="hs-identifier hs-var">W16</span></a></span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condIntReg"><span class="hs-identifier hs-var">condIntReg</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#GEU"><span class="hs-identifier hs-var">GEU</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-199"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_U_Lt"><span class="hs-identifier hs-type">MO_U_Lt</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W16"><span class="hs-identifier hs-var">W16</span></a></span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condIntReg"><span class="hs-identifier hs-var">condIntReg</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#LU"><span class="hs-identifier hs-var">LU</span></a></span><span>  </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-200"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_U_Le"><span class="hs-identifier hs-type">MO_U_Le</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W16"><span class="hs-identifier hs-var">W16</span></a></span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condIntReg"><span class="hs-identifier hs-var">condIntReg</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#LEU"><span class="hs-identifier hs-var">LEU</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-201"></span><span>
</span><span id="line-202"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_Add"><span class="hs-identifier hs-type">MO_Add</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Width
-&gt; (Reg -&gt; RI -&gt; Reg -&gt; Instr)
-&gt; CmmExpr
-&gt; CmmExpr
-&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialCode"><span class="hs-identifier hs-var">trivialCode</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Bool -&gt; Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#ADD"><span class="hs-identifier hs-var">ADD</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-203"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_Sub"><span class="hs-identifier hs-type">MO_Sub</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Width
-&gt; (Reg -&gt; RI -&gt; Reg -&gt; Instr)
-&gt; CmmExpr
-&gt; CmmExpr
-&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialCode"><span class="hs-identifier hs-var">trivialCode</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Bool -&gt; Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SUB"><span class="hs-identifier hs-var">SUB</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-204"></span><span>
</span><span id="line-205"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_S_MulMayOflo"><span class="hs-identifier hs-type">MO_S_MulMayOflo</span></a></span><span> </span><span id="local-6989586621681033813"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033813"><span class="hs-identifier hs-var">rep</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Width -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#imulMayOflo"><span class="hs-identifier hs-var">imulMayOflo</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033813"><span class="hs-identifier hs-var">rep</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-206"></span><span>
</span><span id="line-207"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_S_Quot"><span class="hs-identifier hs-type">MO_S_Quot</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Bool -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#idiv"><span class="hs-identifier hs-var">idiv</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>  </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-208"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_U_Quot"><span class="hs-identifier hs-type">MO_U_Quot</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Bool -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#idiv"><span class="hs-identifier hs-var">idiv</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-209"></span><span>
</span><span id="line-210"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_S_Rem"><span class="hs-identifier hs-type">MO_S_Rem</span></a></span><span>  </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#irem"><span class="hs-identifier hs-var">irem</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span>  </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-211"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_U_Rem"><span class="hs-identifier hs-type">MO_U_Rem</span></a></span><span>  </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span>     </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#irem"><span class="hs-identifier hs-var">irem</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-212"></span><span>
</span><span id="line-213"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_F_Eq"><span class="hs-identifier hs-type">MO_F_Eq</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span>         </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condFltReg"><span class="hs-identifier hs-var">condFltReg</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#EQQ"><span class="hs-identifier hs-var">EQQ</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-214"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_F_Ne"><span class="hs-identifier hs-type">MO_F_Ne</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span>         </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condFltReg"><span class="hs-identifier hs-var">condFltReg</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#NE"><span class="hs-identifier hs-var">NE</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-215"></span><span>
</span><span id="line-216"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_F_Gt"><span class="hs-identifier hs-type">MO_F_Gt</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span>         </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condFltReg"><span class="hs-identifier hs-var">condFltReg</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#GTT"><span class="hs-identifier hs-var">GTT</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-217"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_F_Ge"><span class="hs-identifier hs-type">MO_F_Ge</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span>         </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condFltReg"><span class="hs-identifier hs-var">condFltReg</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#GE"><span class="hs-identifier hs-var">GE</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-218"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_F_Lt"><span class="hs-identifier hs-type">MO_F_Lt</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span>         </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condFltReg"><span class="hs-identifier hs-var">condFltReg</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#LTT"><span class="hs-identifier hs-var">LTT</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-219"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_F_Le"><span class="hs-identifier hs-type">MO_F_Le</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span>         </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condFltReg"><span class="hs-identifier hs-var">condFltReg</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#LE"><span class="hs-identifier hs-var">LE</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-220"></span><span>
</span><span id="line-221"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_F_Add"><span class="hs-identifier hs-type">MO_F_Add</span></a></span><span>  </span><span id="local-6989586621681033797"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033797"><span class="hs-identifier hs-var">w</span></a></span></span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Width
-&gt; (Format -&gt; Reg -&gt; Reg -&gt; Reg -&gt; Instr)
-&gt; CmmExpr
-&gt; CmmExpr
-&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialFCode"><span class="hs-identifier hs-var">trivialFCode</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033797"><span class="hs-identifier hs-var">w</span></a></span><span> </span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; Reg -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#FADD"><span class="hs-identifier hs-var">FADD</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-222"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_F_Sub"><span class="hs-identifier hs-type">MO_F_Sub</span></a></span><span>  </span><span id="local-6989586621681033793"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033793"><span class="hs-identifier hs-var">w</span></a></span></span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Width
-&gt; (Format -&gt; Reg -&gt; Reg -&gt; Reg -&gt; Instr)
-&gt; CmmExpr
-&gt; CmmExpr
-&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialFCode"><span class="hs-identifier hs-var">trivialFCode</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033793"><span class="hs-identifier hs-var">w</span></a></span><span> </span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; Reg -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#FSUB"><span class="hs-identifier hs-var">FSUB</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-223"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_F_Mul"><span class="hs-identifier hs-type">MO_F_Mul</span></a></span><span>  </span><span id="local-6989586621681033790"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033790"><span class="hs-identifier hs-var">w</span></a></span></span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Width
-&gt; (Format -&gt; Reg -&gt; Reg -&gt; Reg -&gt; Instr)
-&gt; CmmExpr
-&gt; CmmExpr
-&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialFCode"><span class="hs-identifier hs-var">trivialFCode</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033790"><span class="hs-identifier hs-var">w</span></a></span><span> </span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; Reg -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#FMUL"><span class="hs-identifier hs-var">FMUL</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-224"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_F_Quot"><span class="hs-identifier hs-type">MO_F_Quot</span></a></span><span> </span><span id="local-6989586621681033787"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033787"><span class="hs-identifier hs-var">w</span></a></span></span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Width
-&gt; (Format -&gt; Reg -&gt; Reg -&gt; Reg -&gt; Instr)
-&gt; CmmExpr
-&gt; CmmExpr
-&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialFCode"><span class="hs-identifier hs-var">trivialFCode</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033787"><span class="hs-identifier hs-var">w</span></a></span><span> </span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; Reg -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#FDIV"><span class="hs-identifier hs-var">FDIV</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-225"></span><span>
</span><span id="line-226"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_And"><span class="hs-identifier hs-type">MO_And</span></a></span><span> </span><span id="local-6989586621681033784"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033784"><span class="hs-identifier hs-var">rep</span></a></span></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Width
-&gt; (Reg -&gt; RI -&gt; Reg -&gt; Instr)
-&gt; CmmExpr
-&gt; CmmExpr
-&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialCode"><span class="hs-identifier hs-var">trivialCode</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033784"><span class="hs-identifier hs-var">rep</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#AND"><span class="hs-identifier hs-var">AND</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-227"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_Or"><span class="hs-identifier hs-type">MO_Or</span></a></span><span>  </span><span id="local-6989586621681033782"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033782"><span class="hs-identifier hs-var">rep</span></a></span></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Width
-&gt; (Reg -&gt; RI -&gt; Reg -&gt; Instr)
-&gt; CmmExpr
-&gt; CmmExpr
-&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialCode"><span class="hs-identifier hs-var">trivialCode</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033782"><span class="hs-identifier hs-var">rep</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#OR"><span class="hs-identifier hs-var">OR</span></a></span><span>  </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-228"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_Xor"><span class="hs-identifier hs-type">MO_Xor</span></a></span><span> </span><span id="local-6989586621681033779"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033779"><span class="hs-identifier hs-var">rep</span></a></span></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Width
-&gt; (Reg -&gt; RI -&gt; Reg -&gt; Instr)
-&gt; CmmExpr
-&gt; CmmExpr
-&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialCode"><span class="hs-identifier hs-var">trivialCode</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033779"><span class="hs-identifier hs-var">rep</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#XOR"><span class="hs-identifier hs-var">XOR</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-229"></span><span>
</span><span id="line-230"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_Mul"><span class="hs-identifier hs-type">MO_Mul</span></a></span><span> </span><span id="local-6989586621681033776"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033776"><span class="hs-identifier hs-var">rep</span></a></span></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Width
-&gt; (Reg -&gt; RI -&gt; Reg -&gt; Instr)
-&gt; CmmExpr
-&gt; CmmExpr
-&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialCode"><span class="hs-identifier hs-var">trivialCode</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033776"><span class="hs-identifier hs-var">rep</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SMUL"><span class="hs-identifier hs-var">SMUL</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-231"></span><span>
</span><span id="line-232"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_Shl"><span class="hs-identifier hs-type">MO_Shl</span></a></span><span> </span><span id="local-6989586621681033773"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033773"><span class="hs-identifier hs-var">rep</span></a></span></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Width
-&gt; (Reg -&gt; RI -&gt; Reg -&gt; Instr)
-&gt; CmmExpr
-&gt; CmmExpr
-&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialCode"><span class="hs-identifier hs-var">trivialCode</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033773"><span class="hs-identifier hs-var">rep</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SLL"><span class="hs-identifier hs-var">SLL</span></a></span><span>  </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-233"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_U_Shr"><span class="hs-identifier hs-type">MO_U_Shr</span></a></span><span> </span><span id="local-6989586621681033772"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033772"><span class="hs-identifier hs-var">rep</span></a></span></span><span>      </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Width
-&gt; (Reg -&gt; RI -&gt; Reg -&gt; Instr)
-&gt; CmmExpr
-&gt; CmmExpr
-&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialCode"><span class="hs-identifier hs-var">trivialCode</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033772"><span class="hs-identifier hs-var">rep</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SRL"><span class="hs-identifier hs-var">SRL</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-234"></span><span>      </span><span class="annot"><a href="GHC.Cmm.MachOp.html#MO_S_Shr"><span class="hs-identifier hs-type">MO_S_Shr</span></a></span><span> </span><span id="local-6989586621681033770"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033770"><span class="hs-identifier hs-var">rep</span></a></span></span><span>      </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Width
-&gt; (Reg -&gt; RI -&gt; Reg -&gt; Instr)
-&gt; CmmExpr
-&gt; CmmExpr
-&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialCode"><span class="hs-identifier hs-var">trivialCode</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033770"><span class="hs-identifier hs-var">rep</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SRA"><span class="hs-identifier hs-var">SRA</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033840"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033839"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-235"></span><span>
</span><span id="line-236"></span><span>      </span><span class="annot"><span class="annottext">MachOp
</span><span class="hs-identifier">_</span></span><span>                 </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc -&gt; NatM Register
forall a. HasCallStack =&gt; String -&gt; SDoc -&gt; a
</span><a href="GHC.Utils.Outputable.html#pprPanic"><span class="hs-identifier hs-var">pprPanic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;getRegister(sparc) - binary CmmMachOp (1)&quot;</span></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">MachOp -&gt; SDoc
</span><a href="GHC.Cmm.MachOp.html#pprMachOp"><span class="hs-identifier hs-var">pprMachOp</span></a></span><span> </span><span class="annot"><span class="annottext">MachOp
</span><a href="#local-6989586621681033841"><span class="hs-identifier hs-var">mop</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-237"></span><span>
</span><span id="line-238"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getRegister"><span class="hs-identifier hs-var">getRegister</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmLoad"><span class="hs-identifier hs-type">CmmLoad</span></a></span><span> </span><span id="local-6989586621681033765"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033765"><span class="hs-identifier hs-var">mem</span></a></span></span><span> </span><span id="local-6989586621681033764"><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681033764"><span class="hs-identifier hs-var">pk</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-239"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Amode"><span class="hs-identifier hs-type">Amode</span></a></span><span> </span><span id="local-6989586621681033762"><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681033762"><span class="hs-identifier hs-var">src</span></a></span></span><span> </span><span id="local-6989586621681033761"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033761"><span class="hs-identifier hs-var">code</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM Amode
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Amode.html#getAmode"><span class="hs-identifier hs-var">getAmode</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033765"><span class="hs-identifier hs-var">mem</span></a></span><span>
</span><span id="line-240"></span><span>    </span><span class="hs-keyword">let</span><span>
</span><span id="line-241"></span><span>        </span><span id="local-6989586621681033759"><span class="annot"><span class="annottext">code__2 :: Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033759"><span class="hs-identifier hs-var hs-var">code__2</span></a></span></span><span> </span><span id="local-6989586621681033758"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033758"><span class="hs-identifier hs-var">dst</span></a></span></span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033761"><span class="hs-identifier hs-var">code</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span> </span><span class="annot"><span class="annottext">Format -&gt; AddrMode -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#LD"><span class="hs-identifier hs-var">LD</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmType -&gt; Format
</span><a href="GHC.CmmToAsm.Format.html#cmmTypeFormat"><span class="hs-identifier hs-var">cmmTypeFormat</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681033764"><span class="hs-identifier hs-var">pk</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">AddrMode
</span><a href="#local-6989586621681033762"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033758"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-242"></span><span>    </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; InstrBlock) -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-var">Any</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmType -&gt; Format
</span><a href="GHC.CmmToAsm.Format.html#cmmTypeFormat"><span class="hs-identifier hs-var">cmmTypeFormat</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681033764"><span class="hs-identifier hs-var">pk</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033759"><span class="hs-identifier hs-var">code__2</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-243"></span><span>
</span><span id="line-244"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getRegister"><span class="hs-identifier hs-var">getRegister</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmLit"><span class="hs-identifier hs-type">CmmLit</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmInt"><span class="hs-identifier hs-type">CmmInt</span></a></span><span> </span><span id="local-6989586621681033756"><span class="annot"><span class="annottext">Integer
</span><a href="#local-6989586621681033756"><span class="hs-identifier hs-var">i</span></a></span></span><span> </span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-245"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Integer -&gt; Bool
forall a. Integral a =&gt; a -&gt; Bool
</span><a href="GHC.CmmToAsm.SPARC.Base.html#fits13Bits"><span class="hs-identifier hs-var">fits13Bits</span></a></span><span> </span><span class="annot"><span class="annottext">Integer
</span><a href="#local-6989586621681033756"><span class="hs-identifier hs-var">i</span></a></span><span>
</span><span id="line-246"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">let</span><span>
</span><span id="line-247"></span><span>        </span><span id="local-6989586621681033752"><span class="annot"><span class="annottext">src :: Imm
</span><a href="#local-6989586621681033752"><span class="hs-identifier hs-var hs-var">src</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Integer -&gt; Int
forall a. Num a =&gt; Integer -&gt; a
</span><a href="../../base/src/GHC.Num.html#fromInteger"><span class="hs-identifier hs-var">fromInteger</span></a></span><span> </span><span class="annot"><span class="annottext">Integer
</span><a href="#local-6989586621681033756"><span class="hs-identifier hs-var">i</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-248"></span><span>        </span><span id="local-6989586621681033751"><span class="annot"><span class="annottext">code :: Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033751"><span class="hs-identifier hs-var hs-var">code</span></a></span></span><span> </span><span id="local-6989586621681033750"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033750"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Instr -&gt; InstrBlock
forall a. a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#unitOL"><span class="hs-identifier hs-var">unitOL</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#OR"><span class="hs-identifier hs-var">OR</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIImm"><span class="hs-identifier hs-var">RIImm</span></a></span><span> </span><span class="annot"><span class="annottext">Imm
</span><a href="#local-6989586621681033752"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033750"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-249"></span><span>    </span><span class="hs-keyword">in</span><span>
</span><span id="line-250"></span><span>        </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; InstrBlock) -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-var">Any</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033751"><span class="hs-identifier hs-var">code</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-251"></span><span>
</span><span id="line-252"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getRegister"><span class="hs-identifier hs-var">getRegister</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmLit"><span class="hs-identifier hs-type">CmmLit</span></a></span><span> </span><span id="local-6989586621681033748"><span class="annot"><span class="annottext">CmmLit
</span><a href="#local-6989586621681033748"><span class="hs-identifier hs-var">lit</span></a></span></span><span class="hs-special">)</span><span>
</span><span id="line-253"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681033747"><span class="annot"><span class="annottext">imm :: Imm
</span><a href="#local-6989586621681033747"><span class="hs-identifier hs-var hs-var">imm</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmLit -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#litToImm"><span class="hs-identifier hs-var">litToImm</span></a></span><span> </span><span class="annot"><span class="annottext">CmmLit
</span><a href="#local-6989586621681033748"><span class="hs-identifier hs-var">lit</span></a></span><span>
</span><span id="line-254"></span><span>        </span><span id="local-6989586621681033745"><span class="annot"><span class="annottext">code :: Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033745"><span class="hs-identifier hs-var hs-var">code</span></a></span></span><span> </span><span id="local-6989586621681033744"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033744"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span> </span><span class="hs-special">[</span><span>
</span><span id="line-255"></span><span>            </span><span class="annot"><span class="annottext">Imm -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SETHI"><span class="hs-identifier hs-var">SETHI</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#HI"><span class="hs-identifier hs-var">HI</span></a></span><span> </span><span class="annot"><span class="annottext">Imm
</span><a href="#local-6989586621681033747"><span class="hs-identifier hs-var">imm</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033744"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-256"></span><span>            </span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#OR"><span class="hs-identifier hs-var">OR</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033744"><span class="hs-identifier hs-var">dst</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIImm"><span class="hs-identifier hs-var">RIImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#LO"><span class="hs-identifier hs-var">LO</span></a></span><span> </span><span class="annot"><span class="annottext">Imm
</span><a href="#local-6989586621681033747"><span class="hs-identifier hs-var">imm</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033744"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-257"></span><span>    </span><span class="hs-keyword">in</span><span> </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; InstrBlock) -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-var">Any</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033745"><span class="hs-identifier hs-var">code</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-258"></span><span>
</span><span id="line-259"></span><span>
</span><span id="line-260"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getRegister"><span class="hs-identifier hs-var">getRegister</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><span class="hs-identifier">_</span></span><span>
</span><span id="line-261"></span><span>        </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; NatM Register
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;SPARC.CodeGen.Gen32.getRegister: no match&quot;</span></span><span>
</span><span id="line-262"></span><span>
</span><span id="line-263"></span><span>
</span><span id="line-264"></span><span class="hs-comment">-- | sign extend and widen</span><span>
</span><span id="line-265"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#integerExtend"><span class="hs-identifier hs-type">integerExtend</span></a></span><span>
</span><span id="line-266"></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Type.html#Width"><span class="hs-identifier hs-type">Width</span></a></span><span>                </span><span class="hs-comment">-- ^ width of source expression</span><span>
</span><span id="line-267"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Type.html#Width"><span class="hs-identifier hs-type">Width</span></a></span><span>                </span><span class="hs-comment">-- ^ width of result</span><span>
</span><span id="line-268"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span>              </span><span class="hs-comment">-- ^ source expression</span><span>
</span><span id="line-269"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Register"><span class="hs-identifier hs-type">Register</span></a></span><span>
</span><span id="line-270"></span><span>
</span><span id="line-271"></span><span id="integerExtend"><span class="annot"><span class="annottext">integerExtend :: Width -&gt; Width -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#integerExtend"><span class="hs-identifier hs-var hs-var">integerExtend</span></a></span></span><span> </span><span id="local-6989586621681033743"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033743"><span class="hs-identifier hs-var">from</span></a></span></span><span> </span><span id="local-6989586621681033742"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033742"><span class="hs-identifier hs-var">to</span></a></span></span><span> </span><span id="local-6989586621681033741"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033741"><span class="hs-identifier hs-var">expr</span></a></span></span><span>
</span><span id="line-272"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>   </span><span class="hs-comment">-- load the expr into some register</span><span>
</span><span id="line-273"></span><span>        </span><span class="hs-special">(</span><span id="local-6989586621681033740"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033740"><span class="hs-identifier hs-var">reg</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033739"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033739"><span class="hs-identifier hs-var">e_code</span></a></span></span><span class="hs-special">)</span><span>   </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033741"><span class="hs-identifier hs-var">expr</span></a></span><span>
</span><span id="line-274"></span><span>        </span><span id="local-6989586621681033738"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033738"><span class="hs-identifier hs-var">tmp</span></a></span></span><span>             </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>
</span><span id="line-275"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681033734"><span class="annot"><span class="annottext">bitCount :: Int
</span><a href="#local-6989586621681033734"><span class="hs-identifier hs-var hs-var">bitCount</span></a></span></span><span>
</span><span id="line-276"></span><span>                </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033743"><span class="hs-identifier hs-var">from</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033742"><span class="hs-identifier hs-var">to</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-277"></span><span>                        </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W8"><span class="hs-identifier hs-var">W8</span></a></span><span class="hs-special">,</span><span>  </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span class="hs-special">)</span><span>      </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">24</span></span><span>
</span><span id="line-278"></span><span>                        </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W16"><span class="hs-identifier hs-var">W16</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span class="hs-special">)</span><span>      </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">16</span></span><span>
</span><span id="line-279"></span><span>                        </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W8"><span class="hs-identifier hs-var">W8</span></a></span><span class="hs-special">,</span><span>  </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W16"><span class="hs-identifier hs-var">W16</span></a></span><span class="hs-special">)</span><span>      </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">24</span></span><span>
</span><span id="line-280"></span><span>                        </span><span class="annot"><span class="annottext">(Width, Width)
</span><span class="hs-identifier">_</span></span><span>               </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; Int
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;SPARC.CodeGen.Gen32: no match&quot;</span></span><span>
</span><span id="line-281"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681033733"><span class="annot"><span class="annottext">code :: Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033733"><span class="hs-identifier hs-var hs-var">code</span></a></span></span><span> </span><span id="local-6989586621681033732"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033732"><span class="hs-identifier hs-var">dst</span></a></span></span><span>
</span><span id="line-282"></span><span>                </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033739"><span class="hs-identifier hs-var">e_code</span></a></span><span>
</span><span id="line-283"></span><span>
</span><span id="line-284"></span><span>                </span><span class="hs-comment">-- local shift word left to load the sign bit</span><span>
</span><span id="line-285"></span><span>                </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span>  </span><span class="annot"><span class="annottext">Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SLL"><span class="hs-identifier hs-var">SLL</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033740"><span class="hs-identifier hs-var">reg</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIImm"><span class="hs-identifier hs-var">RIImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681033734"><span class="hs-identifier hs-var">bitCount</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033738"><span class="hs-identifier hs-var">tmp</span></a></span><span>
</span><span id="line-286"></span><span>
</span><span id="line-287"></span><span>                </span><span class="hs-comment">-- arithmetic shift right to sign extend</span><span>
</span><span id="line-288"></span><span>                </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span>  </span><span class="annot"><span class="annottext">Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SRA"><span class="hs-identifier hs-var">SRA</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033738"><span class="hs-identifier hs-var">tmp</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIImm"><span class="hs-identifier hs-var">RIImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681033734"><span class="hs-identifier hs-var">bitCount</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033732"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-289"></span><span>
</span><span id="line-290"></span><span>        </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; InstrBlock) -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-var">Any</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width -&gt; Format
</span><a href="GHC.CmmToAsm.Format.html#intFormat"><span class="hs-identifier hs-var">intFormat</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033742"><span class="hs-identifier hs-var">to</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033733"><span class="hs-identifier hs-var">code</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-291"></span><span>
</span><span id="line-292"></span><span>
</span><span id="line-293"></span><span class="hs-comment">-- | For nop word format conversions we set the resulting value to have the</span><span>
</span><span id="line-294"></span><span class="hs-comment">--      required size, but don't need to generate any actual code.</span><span>
</span><span id="line-295"></span><span class="hs-comment">--</span><span>
</span><span id="line-296"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#conversionNop"><span class="hs-identifier hs-type">conversionNop</span></a></span><span>
</span><span id="line-297"></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Register"><span class="hs-identifier hs-type">Register</span></a></span><span>
</span><span id="line-298"></span><span>
</span><span id="line-299"></span><span id="conversionNop"><span class="annot"><span class="annottext">conversionNop :: Format -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#conversionNop"><span class="hs-identifier hs-var hs-var">conversionNop</span></a></span></span><span> </span><span id="local-6989586621681033731"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681033731"><span class="hs-identifier hs-var">new_rep</span></a></span></span><span> </span><span id="local-6989586621681033730"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033730"><span class="hs-identifier hs-var">expr</span></a></span></span><span>
</span><span id="line-300"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>   </span><span id="local-6989586621681033729"><span class="annot"><span class="annottext">Register
</span><a href="#local-6989586621681033729"><span class="hs-identifier hs-var">e_code</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getRegister"><span class="hs-identifier hs-var">getRegister</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033730"><span class="hs-identifier hs-var">expr</span></a></span><span>
</span><span id="line-301"></span><span>        </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Register -&gt; Format -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#setFormatOfRegister"><span class="hs-identifier hs-var">setFormatOfRegister</span></a></span><span> </span><span class="annot"><span class="annottext">Register
</span><a href="#local-6989586621681033729"><span class="hs-identifier hs-var">e_code</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681033731"><span class="hs-identifier hs-var">new_rep</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-302"></span><span>
</span><span id="line-303"></span><span>
</span><span id="line-304"></span><span>
</span><span id="line-305"></span><span class="hs-comment">-- | Generate an integer division instruction.</span><span>
</span><span id="line-306"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#idiv"><span class="hs-identifier hs-type">idiv</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Register"><span class="hs-identifier hs-type">Register</span></a></span><span>
</span><span id="line-307"></span><span>
</span><span id="line-308"></span><span class="hs-comment">-- For unsigned division with a 32 bit numerator,</span><span>
</span><span id="line-309"></span><span class="hs-comment">--              we can just clear the Y register.</span><span>
</span><span id="line-310"></span><span id="idiv"><span class="annot"><span class="annottext">idiv :: Bool -&gt; Bool -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#idiv"><span class="hs-identifier hs-var hs-var">idiv</span></a></span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span id="local-6989586621681033727"><span class="annot"><span class="annottext">Bool
</span><a href="#local-6989586621681033727"><span class="hs-identifier hs-var">cc</span></a></span></span><span> </span><span id="local-6989586621681033726"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033726"><span class="hs-identifier hs-var">x</span></a></span></span><span> </span><span id="local-6989586621681033725"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033725"><span class="hs-identifier hs-var">y</span></a></span></span><span>
</span><span id="line-311"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-312"></span><span>        </span><span class="hs-special">(</span><span id="local-6989586621681033724"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033724"><span class="hs-identifier hs-var">a_reg</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033723"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033723"><span class="hs-identifier hs-var">a_code</span></a></span></span><span class="hs-special">)</span><span>         </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033726"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-313"></span><span>        </span><span class="hs-special">(</span><span id="local-6989586621681033722"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033722"><span class="hs-identifier hs-var">b_reg</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033721"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033721"><span class="hs-identifier hs-var">b_code</span></a></span></span><span class="hs-special">)</span><span>         </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033725"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-314"></span><span>
</span><span id="line-315"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681033720"><span class="annot"><span class="annottext">code :: Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033720"><span class="hs-identifier hs-var hs-var">code</span></a></span></span><span> </span><span id="local-6989586621681033719"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033719"><span class="hs-identifier hs-var">dst</span></a></span></span><span>
</span><span id="line-316"></span><span>                </span><span class="hs-glyph">=</span><span>       </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033723"><span class="hs-identifier hs-var">a_code</span></a></span><span>
</span><span id="line-317"></span><span>                </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033721"><span class="hs-identifier hs-var">b_code</span></a></span><span>
</span><span id="line-318"></span><span>                </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span>
</span><span id="line-319"></span><span>                        </span><span class="hs-special">[</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#WRY"><span class="hs-identifier hs-var">WRY</span></a></span><span>  </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span>
</span><span id="line-320"></span><span>                        </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#UDIV"><span class="hs-identifier hs-var">UDIV</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="#local-6989586621681033727"><span class="hs-identifier hs-var">cc</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033724"><span class="hs-identifier hs-var">a_reg</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIReg"><span class="hs-identifier hs-var">RIReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033722"><span class="hs-identifier hs-var">b_reg</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033719"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-321"></span><span>
</span><span id="line-322"></span><span>        </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; InstrBlock) -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-var">Any</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033720"><span class="hs-identifier hs-var">code</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-323"></span><span>
</span><span id="line-324"></span><span>
</span><span id="line-325"></span><span class="hs-comment">-- For _signed_ division with a 32 bit numerator,</span><span>
</span><span id="line-326"></span><span class="hs-comment">--              we have to sign extend the numerator into the Y register.</span><span>
</span><span id="line-327"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#idiv"><span class="hs-identifier hs-var">idiv</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span> </span><span id="local-6989586621681033715"><span class="annot"><span class="annottext">Bool
</span><a href="#local-6989586621681033715"><span class="hs-identifier hs-var">cc</span></a></span></span><span> </span><span id="local-6989586621681033714"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033714"><span class="hs-identifier hs-var">x</span></a></span></span><span> </span><span id="local-6989586621681033713"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033713"><span class="hs-identifier hs-var">y</span></a></span></span><span>
</span><span id="line-328"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-329"></span><span>        </span><span class="hs-special">(</span><span id="local-6989586621681033712"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033712"><span class="hs-identifier hs-var">a_reg</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033711"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033711"><span class="hs-identifier hs-var">a_code</span></a></span></span><span class="hs-special">)</span><span>         </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033714"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-330"></span><span>        </span><span class="hs-special">(</span><span id="local-6989586621681033710"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033710"><span class="hs-identifier hs-var">b_reg</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033709"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033709"><span class="hs-identifier hs-var">b_code</span></a></span></span><span class="hs-special">)</span><span>         </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033713"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-331"></span><span>
</span><span id="line-332"></span><span>        </span><span id="local-6989586621681033708"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033708"><span class="hs-identifier hs-var">tmp</span></a></span></span><span>                     </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>
</span><span id="line-333"></span><span>
</span><span id="line-334"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681033707"><span class="annot"><span class="annottext">code :: Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033707"><span class="hs-identifier hs-var hs-var">code</span></a></span></span><span> </span><span id="local-6989586621681033706"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033706"><span class="hs-identifier hs-var">dst</span></a></span></span><span>
</span><span id="line-335"></span><span>                </span><span class="hs-glyph">=</span><span>       </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033711"><span class="hs-identifier hs-var">a_code</span></a></span><span>
</span><span id="line-336"></span><span>                </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033709"><span class="hs-identifier hs-var">b_code</span></a></span><span>
</span><span id="line-337"></span><span>                </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span>
</span><span id="line-338"></span><span>                        </span><span class="hs-special">[</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SRA"><span class="hs-identifier hs-var">SRA</span></a></span><span>  </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033712"><span class="hs-identifier hs-var">a_reg</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIImm"><span class="hs-identifier hs-var">RIImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">16</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033708"><span class="hs-identifier hs-var">tmp</span></a></span><span>            </span><span class="hs-comment">-- sign extend</span><span>
</span><span id="line-339"></span><span>                        </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SRA"><span class="hs-identifier hs-var">SRA</span></a></span><span>  </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033708"><span class="hs-identifier hs-var">tmp</span></a></span><span>   </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIImm"><span class="hs-identifier hs-var">RIImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">16</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033708"><span class="hs-identifier hs-var">tmp</span></a></span><span>
</span><span id="line-340"></span><span>
</span><span id="line-341"></span><span>                        </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#WRY"><span class="hs-identifier hs-var">WRY</span></a></span><span>  </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033708"><span class="hs-identifier hs-var">tmp</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span>
</span><span id="line-342"></span><span>                        </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SDIV"><span class="hs-identifier hs-var">SDIV</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="#local-6989586621681033715"><span class="hs-identifier hs-var">cc</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033712"><span class="hs-identifier hs-var">a_reg</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIReg"><span class="hs-identifier hs-var">RIReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033710"><span class="hs-identifier hs-var">b_reg</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033706"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-343"></span><span>
</span><span id="line-344"></span><span>        </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; InstrBlock) -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-var">Any</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033707"><span class="hs-identifier hs-var">code</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-345"></span><span>
</span><span id="line-346"></span><span>
</span><span id="line-347"></span><span class="hs-comment">-- | Do an integer remainder.</span><span>
</span><span id="line-348"></span><span class="hs-comment">--</span><span>
</span><span id="line-349"></span><span class="hs-comment">--       NOTE:  The SPARC v8 architecture manual says that integer division</span><span>
</span><span id="line-350"></span><span class="hs-comment">--              instructions _may_ generate a remainder, depending on the implementation.</span><span>
</span><span id="line-351"></span><span class="hs-comment">--              If so it is _recommended_ that the remainder is placed in the Y register.</span><span>
</span><span id="line-352"></span><span class="hs-comment">--</span><span>
</span><span id="line-353"></span><span class="hs-comment">--          The UltraSparc 2007 manual says Y is _undefined_ after division.</span><span>
</span><span id="line-354"></span><span class="hs-comment">--</span><span>
</span><span id="line-355"></span><span class="hs-comment">--              The SPARC T2 doesn't store the remainder, not sure about the others.</span><span>
</span><span id="line-356"></span><span class="hs-comment">--              It's probably best not to worry about it, and just generate our own</span><span>
</span><span id="line-357"></span><span class="hs-comment">--              remainders.</span><span>
</span><span id="line-358"></span><span class="hs-comment">--</span><span>
</span><span id="line-359"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#irem"><span class="hs-identifier hs-type">irem</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Register"><span class="hs-identifier hs-type">Register</span></a></span><span>
</span><span id="line-360"></span><span>
</span><span id="line-361"></span><span class="hs-comment">-- For unsigned operands:</span><span>
</span><span id="line-362"></span><span class="hs-comment">--              Division is between a 64 bit numerator and a 32 bit denominator,</span><span>
</span><span id="line-363"></span><span class="hs-comment">--              so we still have to clear the Y register.</span><span>
</span><span id="line-364"></span><span id="irem"><span class="annot"><span class="annottext">irem :: Bool -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#irem"><span class="hs-identifier hs-var hs-var">irem</span></a></span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span id="local-6989586621681033704"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033704"><span class="hs-identifier hs-var">x</span></a></span></span><span> </span><span id="local-6989586621681033703"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033703"><span class="hs-identifier hs-var">y</span></a></span></span><span>
</span><span id="line-365"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-366"></span><span>        </span><span class="hs-special">(</span><span id="local-6989586621681033702"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033702"><span class="hs-identifier hs-var">a_reg</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033701"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033701"><span class="hs-identifier hs-var">a_code</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033704"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-367"></span><span>        </span><span class="hs-special">(</span><span id="local-6989586621681033700"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033700"><span class="hs-identifier hs-var">b_reg</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033699"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033699"><span class="hs-identifier hs-var">b_code</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033703"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-368"></span><span>
</span><span id="line-369"></span><span>        </span><span id="local-6989586621681033698"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033698"><span class="hs-identifier hs-var">tmp_reg</span></a></span></span><span>         </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>
</span><span id="line-370"></span><span>
</span><span id="line-371"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681033697"><span class="annot"><span class="annottext">code :: Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033697"><span class="hs-identifier hs-var hs-var">code</span></a></span></span><span> </span><span id="local-6989586621681033696"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033696"><span class="hs-identifier hs-var">dst</span></a></span></span><span>
</span><span id="line-372"></span><span>                </span><span class="hs-glyph">=</span><span>       </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033701"><span class="hs-identifier hs-var">a_code</span></a></span><span>
</span><span id="line-373"></span><span>                </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033699"><span class="hs-identifier hs-var">b_code</span></a></span><span>
</span><span id="line-374"></span><span>                </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span>
</span><span id="line-375"></span><span>                        </span><span class="hs-special">[</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#WRY"><span class="hs-identifier hs-var">WRY</span></a></span><span>   </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span>
</span><span id="line-376"></span><span>                        </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#UDIV"><span class="hs-identifier hs-var">UDIV</span></a></span><span>  </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span>         </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033702"><span class="hs-identifier hs-var">a_reg</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIReg"><span class="hs-identifier hs-var">RIReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033700"><span class="hs-identifier hs-var">b_reg</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033698"><span class="hs-identifier hs-var">tmp_reg</span></a></span><span>
</span><span id="line-377"></span><span>                        </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#UMUL"><span class="hs-identifier hs-var">UMUL</span></a></span><span>  </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span>       </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033698"><span class="hs-identifier hs-var">tmp_reg</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIReg"><span class="hs-identifier hs-var">RIReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033700"><span class="hs-identifier hs-var">b_reg</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033698"><span class="hs-identifier hs-var">tmp_reg</span></a></span><span>
</span><span id="line-378"></span><span>                        </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SUB"><span class="hs-identifier hs-var">SUB</span></a></span><span>   </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span>   </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033702"><span class="hs-identifier hs-var">a_reg</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIReg"><span class="hs-identifier hs-var">RIReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033698"><span class="hs-identifier hs-var">tmp_reg</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033696"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-379"></span><span>
</span><span id="line-380"></span><span>        </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span>  </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; InstrBlock) -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-var">Any</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033697"><span class="hs-identifier hs-var">code</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-381"></span><span>
</span><span id="line-382"></span><span>
</span><span id="line-383"></span><span>
</span><span id="line-384"></span><span class="hs-comment">-- For signed operands:</span><span>
</span><span id="line-385"></span><span class="hs-comment">--              Make sure to sign extend into the Y register, or the remainder</span><span>
</span><span id="line-386"></span><span class="hs-comment">--              will have the wrong sign when the numerator is negative.</span><span>
</span><span id="line-387"></span><span class="hs-comment">--</span><span>
</span><span id="line-388"></span><span class="hs-comment">--      TODO:   When sign extending, GCC only shifts the a_reg right by 17 bits,</span><span>
</span><span id="line-389"></span><span class="hs-comment">--              not the full 32. Not sure why this is, something to do with overflow?</span><span>
</span><span id="line-390"></span><span class="hs-comment">--              If anyone cares enough about the speed of signed remainder they</span><span>
</span><span id="line-391"></span><span class="hs-comment">--              can work it out themselves (then tell me). -- BL 2009/01/20</span><span>
</span><span id="line-392"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#irem"><span class="hs-identifier hs-var">irem</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span> </span><span id="local-6989586621681033694"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033694"><span class="hs-identifier hs-var">x</span></a></span></span><span> </span><span id="local-6989586621681033693"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033693"><span class="hs-identifier hs-var">y</span></a></span></span><span>
</span><span id="line-393"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-394"></span><span>        </span><span class="hs-special">(</span><span id="local-6989586621681033692"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033692"><span class="hs-identifier hs-var">a_reg</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033691"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033691"><span class="hs-identifier hs-var">a_code</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033694"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-395"></span><span>        </span><span class="hs-special">(</span><span id="local-6989586621681033690"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033690"><span class="hs-identifier hs-var">b_reg</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033689"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033689"><span class="hs-identifier hs-var">b_code</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033693"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-396"></span><span>
</span><span id="line-397"></span><span>        </span><span id="local-6989586621681033688"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033688"><span class="hs-identifier hs-var">tmp1_reg</span></a></span></span><span>        </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>
</span><span id="line-398"></span><span>        </span><span id="local-6989586621681033687"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033687"><span class="hs-identifier hs-var">tmp2_reg</span></a></span></span><span>        </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>
</span><span id="line-399"></span><span>
</span><span id="line-400"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681033686"><span class="annot"><span class="annottext">code :: Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033686"><span class="hs-identifier hs-var hs-var">code</span></a></span></span><span> </span><span id="local-6989586621681033685"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033685"><span class="hs-identifier hs-var">dst</span></a></span></span><span>
</span><span id="line-401"></span><span>                </span><span class="hs-glyph">=</span><span>       </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033691"><span class="hs-identifier hs-var">a_code</span></a></span><span>
</span><span id="line-402"></span><span>                </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033689"><span class="hs-identifier hs-var">b_code</span></a></span><span>
</span><span id="line-403"></span><span>                </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span>
</span><span id="line-404"></span><span>                        </span><span class="hs-special">[</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SRA"><span class="hs-identifier hs-var">SRA</span></a></span><span>   </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033692"><span class="hs-identifier hs-var">a_reg</span></a></span><span>      </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIImm"><span class="hs-identifier hs-var">RIImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">16</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033688"><span class="hs-identifier hs-var">tmp1_reg</span></a></span><span> </span><span class="hs-comment">-- sign extend</span><span>
</span><span id="line-405"></span><span>                        </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SRA"><span class="hs-identifier hs-var">SRA</span></a></span><span>   </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033688"><span class="hs-identifier hs-var">tmp1_reg</span></a></span><span>   </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIImm"><span class="hs-identifier hs-var">RIImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">16</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033688"><span class="hs-identifier hs-var">tmp1_reg</span></a></span><span> </span><span class="hs-comment">-- sign extend</span><span>
</span><span id="line-406"></span><span>                        </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#WRY"><span class="hs-identifier hs-var">WRY</span></a></span><span>   </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033688"><span class="hs-identifier hs-var">tmp1_reg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span>
</span><span id="line-407"></span><span>
</span><span id="line-408"></span><span>                        </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SDIV"><span class="hs-identifier hs-var">SDIV</span></a></span><span>  </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span>          </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033692"><span class="hs-identifier hs-var">a_reg</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIReg"><span class="hs-identifier hs-var">RIReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033690"><span class="hs-identifier hs-var">b_reg</span></a></span><span class="hs-special">)</span><span>    </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033687"><span class="hs-identifier hs-var">tmp2_reg</span></a></span><span>
</span><span id="line-409"></span><span>                        </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SMUL"><span class="hs-identifier hs-var">SMUL</span></a></span><span>  </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span>       </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033687"><span class="hs-identifier hs-var">tmp2_reg</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIReg"><span class="hs-identifier hs-var">RIReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033690"><span class="hs-identifier hs-var">b_reg</span></a></span><span class="hs-special">)</span><span>    </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033687"><span class="hs-identifier hs-var">tmp2_reg</span></a></span><span>
</span><span id="line-410"></span><span>                        </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SUB"><span class="hs-identifier hs-var">SUB</span></a></span><span>   </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span>    </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033692"><span class="hs-identifier hs-var">a_reg</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIReg"><span class="hs-identifier hs-var">RIReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033687"><span class="hs-identifier hs-var">tmp2_reg</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033685"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-411"></span><span>
</span><span id="line-412"></span><span>        </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; InstrBlock) -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-var">Any</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033686"><span class="hs-identifier hs-var">code</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-413"></span><span>
</span><span id="line-414"></span><span>
</span><span id="line-415"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#imulMayOflo"><span class="hs-identifier hs-type">imulMayOflo</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Type.html#Width"><span class="hs-identifier hs-type">Width</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Register"><span class="hs-identifier hs-type">Register</span></a></span><span>
</span><span id="line-416"></span><span id="imulMayOflo"><span class="annot"><span class="annottext">imulMayOflo :: Width -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#imulMayOflo"><span class="hs-identifier hs-var hs-var">imulMayOflo</span></a></span></span><span> </span><span id="local-6989586621681033684"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033684"><span class="hs-identifier hs-var">rep</span></a></span></span><span> </span><span id="local-6989586621681033683"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033683"><span class="hs-identifier hs-var">a</span></a></span></span><span> </span><span id="local-6989586621681033682"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033682"><span class="hs-identifier hs-var">b</span></a></span></span><span>
</span><span id="line-417"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-418"></span><span>        </span><span class="hs-special">(</span><span id="local-6989586621681033681"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033681"><span class="hs-identifier hs-var">a_reg</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033680"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033680"><span class="hs-identifier hs-var">a_code</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033683"><span class="hs-identifier hs-var">a</span></a></span><span>
</span><span id="line-419"></span><span>        </span><span class="hs-special">(</span><span id="local-6989586621681033679"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033679"><span class="hs-identifier hs-var">b_reg</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033678"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033678"><span class="hs-identifier hs-var">b_code</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033682"><span class="hs-identifier hs-var">b</span></a></span><span>
</span><span id="line-420"></span><span>        </span><span id="local-6989586621681033677"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033677"><span class="hs-identifier hs-var">res_lo</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>
</span><span id="line-421"></span><span>        </span><span id="local-6989586621681033676"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033676"><span class="hs-identifier hs-var">res_hi</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span>
</span><span id="line-422"></span><span>
</span><span id="line-423"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681033673"><span class="annot"><span class="annottext">shift_amt :: Int
</span><a href="#local-6989586621681033673"><span class="hs-identifier hs-var hs-var">shift_amt</span></a></span></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033684"><span class="hs-identifier hs-var">rep</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-424"></span><span>                          </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">31</span></span><span>
</span><span id="line-425"></span><span>                          </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W64"><span class="hs-identifier hs-var">W64</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">63</span></span><span>
</span><span id="line-426"></span><span>                          </span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">String -&gt; Int
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;shift_amt&quot;</span></span><span>
</span><span id="line-427"></span><span>
</span><span id="line-428"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681033672"><span class="annot"><span class="annottext">code :: Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033672"><span class="hs-identifier hs-var hs-var">code</span></a></span></span><span> </span><span id="local-6989586621681033671"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033671"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033680"><span class="hs-identifier hs-var">a_code</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033678"><span class="hs-identifier hs-var">b_code</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span>
</span><span id="line-429"></span><span>                       </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span> </span><span class="hs-special">[</span><span>
</span><span id="line-430"></span><span>                           </span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SMUL"><span class="hs-identifier hs-var">SMUL</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033681"><span class="hs-identifier hs-var">a_reg</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIReg"><span class="hs-identifier hs-var">RIReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033679"><span class="hs-identifier hs-var">b_reg</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033677"><span class="hs-identifier hs-var">res_lo</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-431"></span><span>                           </span><span class="annot"><span class="annottext">Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RDY"><span class="hs-identifier hs-var">RDY</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033676"><span class="hs-identifier hs-var">res_hi</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-432"></span><span>                           </span><span class="annot"><span class="annottext">Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SRA"><span class="hs-identifier hs-var">SRA</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033677"><span class="hs-identifier hs-var">res_lo</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIImm"><span class="hs-identifier hs-var">RIImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><a href="#local-6989586621681033673"><span class="hs-identifier hs-var">shift_amt</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033677"><span class="hs-identifier hs-var">res_lo</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-433"></span><span>                           </span><span class="annot"><span class="annottext">Bool -&gt; Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SUB"><span class="hs-identifier hs-var">SUB</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033677"><span class="hs-identifier hs-var">res_lo</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIReg"><span class="hs-identifier hs-var">RIReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033676"><span class="hs-identifier hs-var">res_hi</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033671"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-434"></span><span>                        </span><span class="hs-special">]</span><span>
</span><span id="line-435"></span><span>        </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; InstrBlock) -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-var">Any</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033672"><span class="hs-identifier hs-var">code</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-436"></span><span>
</span><span id="line-437"></span><span>
</span><span id="line-438"></span><span class="hs-comment">-- -----------------------------------------------------------------------------</span><span>
</span><span id="line-439"></span><span class="hs-comment">-- 'trivial*Code': deal with trivial instructions</span><span>
</span><span id="line-440"></span><span>
</span><span id="line-441"></span><span class="hs-comment">-- Trivial (dyadic: 'trivialCode', floating-point: 'trivialFCode',</span><span>
</span><span id="line-442"></span><span class="hs-comment">-- unary: 'trivialUCode', unary fl-pt:'trivialUFCode') instructions.</span><span>
</span><span id="line-443"></span><span class="hs-comment">-- Only look for constants on the right hand side, because that's</span><span>
</span><span id="line-444"></span><span class="hs-comment">-- where the generic optimizer will have put them.</span><span>
</span><span id="line-445"></span><span>
</span><span id="line-446"></span><span class="hs-comment">-- Similarly, for unary instructions, we don't have to worry about</span><span>
</span><span id="line-447"></span><span class="hs-comment">-- matching an StInt as the argument, because genericOpt will already</span><span>
</span><span id="line-448"></span><span class="hs-comment">-- have handled the constant-folding.</span><span>
</span><span id="line-449"></span><span>
</span><span id="line-450"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialCode"><span class="hs-identifier hs-type">trivialCode</span></a></span><span>
</span><span id="line-451"></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Type.html#Width"><span class="hs-identifier hs-type">Width</span></a></span><span>
</span><span id="line-452"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Instr.html#RI"><span class="hs-identifier hs-type">RI</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-453"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span>
</span><span id="line-454"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span>
</span><span id="line-455"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Register"><span class="hs-identifier hs-type">Register</span></a></span><span>
</span><span id="line-456"></span><span>
</span><span id="line-457"></span><span id="trivialCode"><span class="annot"><span class="annottext">trivialCode :: Width
-&gt; (Reg -&gt; RI -&gt; Reg -&gt; Instr)
-&gt; CmmExpr
-&gt; CmmExpr
-&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialCode"><span class="hs-identifier hs-var hs-var">trivialCode</span></a></span></span><span> </span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681033669"><span class="annot"><span class="annottext">Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="#local-6989586621681033669"><span class="hs-identifier hs-var">instr</span></a></span></span><span> </span><span id="local-6989586621681033668"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033668"><span class="hs-identifier hs-var">x</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmLit"><span class="hs-identifier hs-type">CmmLit</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmInt"><span class="hs-identifier hs-type">CmmInt</span></a></span><span> </span><span id="local-6989586621681033667"><span class="annot"><span class="annottext">Integer
</span><a href="#local-6989586621681033667"><span class="hs-identifier hs-var">y</span></a></span></span><span> </span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-458"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Integer -&gt; Bool
forall a. Integral a =&gt; a -&gt; Bool
</span><a href="GHC.CmmToAsm.SPARC.Base.html#fits13Bits"><span class="hs-identifier hs-var">fits13Bits</span></a></span><span> </span><span class="annot"><span class="annottext">Integer
</span><a href="#local-6989586621681033667"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-459"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-460"></span><span>      </span><span class="hs-special">(</span><span id="local-6989586621681033666"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033666"><span class="hs-identifier hs-var">src1</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033665"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033665"><span class="hs-identifier hs-var">code</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033668"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-461"></span><span>      </span><span class="hs-keyword">let</span><span>
</span><span id="line-462"></span><span>        </span><span id="local-6989586621681033663"><span class="annot"><span class="annottext">src2 :: Imm
</span><a href="#local-6989586621681033663"><span class="hs-identifier hs-var hs-var">src2</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Integer -&gt; Int
forall a. Num a =&gt; Integer -&gt; a
</span><a href="../../base/src/GHC.Num.html#fromInteger"><span class="hs-identifier hs-var">fromInteger</span></a></span><span> </span><span class="annot"><span class="annottext">Integer
</span><a href="#local-6989586621681033667"><span class="hs-identifier hs-var">y</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-463"></span><span>        </span><span id="local-6989586621681033662"><span class="annot"><span class="annottext">code__2 :: Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033662"><span class="hs-identifier hs-var hs-var">code__2</span></a></span></span><span> </span><span id="local-6989586621681033661"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033661"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033665"><span class="hs-identifier hs-var">code</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="#local-6989586621681033669"><span class="hs-identifier hs-var">instr</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033666"><span class="hs-identifier hs-var">src1</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIImm"><span class="hs-identifier hs-var">RIImm</span></a></span><span> </span><span class="annot"><span class="annottext">Imm
</span><a href="#local-6989586621681033663"><span class="hs-identifier hs-var">src2</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033661"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-464"></span><span>      </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; InstrBlock) -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-var">Any</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033662"><span class="hs-identifier hs-var">code__2</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-465"></span><span>
</span><span id="line-466"></span><span>
</span><span id="line-467"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialCode"><span class="hs-identifier hs-var">trivialCode</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681033660"><span class="annot"><span class="annottext">Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="#local-6989586621681033660"><span class="hs-identifier hs-var">instr</span></a></span></span><span> </span><span id="local-6989586621681033659"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033659"><span class="hs-identifier hs-var">x</span></a></span></span><span> </span><span id="local-6989586621681033658"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033658"><span class="hs-identifier hs-var">y</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-468"></span><span>    </span><span class="hs-special">(</span><span id="local-6989586621681033657"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033657"><span class="hs-identifier hs-var">src1</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033656"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033656"><span class="hs-identifier hs-var">code1</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033659"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-469"></span><span>    </span><span class="hs-special">(</span><span id="local-6989586621681033655"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033655"><span class="hs-identifier hs-var">src2</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033654"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033654"><span class="hs-identifier hs-var">code2</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033658"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-470"></span><span>    </span><span class="hs-keyword">let</span><span>
</span><span id="line-471"></span><span>        </span><span id="local-6989586621681033653"><span class="annot"><span class="annottext">code__2 :: Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033653"><span class="hs-identifier hs-var hs-var">code__2</span></a></span></span><span> </span><span id="local-6989586621681033652"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033652"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033656"><span class="hs-identifier hs-var">code1</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033654"><span class="hs-identifier hs-var">code2</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span>
</span><span id="line-472"></span><span>                      </span><span class="annot"><span class="annottext">Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="#local-6989586621681033660"><span class="hs-identifier hs-var">instr</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033657"><span class="hs-identifier hs-var">src1</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIReg"><span class="hs-identifier hs-var">RIReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033655"><span class="hs-identifier hs-var">src2</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033652"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-473"></span><span>    </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; InstrBlock) -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-var">Any</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033653"><span class="hs-identifier hs-var">code__2</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-474"></span><span>
</span><span id="line-475"></span><span>
</span><span id="line-476"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialFCode"><span class="hs-identifier hs-type">trivialFCode</span></a></span><span>
</span><span id="line-477"></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Type.html#Width"><span class="hs-identifier hs-type">Width</span></a></span><span>
</span><span id="line-478"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-479"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span>
</span><span id="line-480"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span>
</span><span id="line-481"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Register"><span class="hs-identifier hs-type">Register</span></a></span><span>
</span><span id="line-482"></span><span>
</span><span id="line-483"></span><span id="trivialFCode"><span class="annot"><span class="annottext">trivialFCode :: Width
-&gt; (Format -&gt; Reg -&gt; Reg -&gt; Reg -&gt; Instr)
-&gt; CmmExpr
-&gt; CmmExpr
-&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialFCode"><span class="hs-identifier hs-var hs-var">trivialFCode</span></a></span></span><span> </span><span id="local-6989586621681033651"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033651"><span class="hs-identifier hs-var">pk</span></a></span></span><span> </span><span id="local-6989586621681033650"><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; Reg -&gt; Reg -&gt; Instr
</span><a href="#local-6989586621681033650"><span class="hs-identifier hs-var">instr</span></a></span></span><span> </span><span id="local-6989586621681033649"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033649"><span class="hs-identifier hs-var">x</span></a></span></span><span> </span><span id="local-6989586621681033648"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033648"><span class="hs-identifier hs-var">y</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-484"></span><span>    </span><span id="local-6989586621681033647"><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681033647"><span class="hs-identifier hs-var">platform</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">NatM Platform
</span><a href="GHC.CmmToAsm.Monad.html#getPlatform"><span class="hs-identifier hs-var">getPlatform</span></a></span><span>
</span><span id="line-485"></span><span>    </span><span class="hs-special">(</span><span id="local-6989586621681033646"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033646"><span class="hs-identifier hs-var">src1</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033645"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033645"><span class="hs-identifier hs-var">code1</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033649"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-486"></span><span>    </span><span class="hs-special">(</span><span id="local-6989586621681033644"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033644"><span class="hs-identifier hs-var">src2</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033643"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033643"><span class="hs-identifier hs-var">code2</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033648"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-487"></span><span>    </span><span id="local-6989586621681033642"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033642"><span class="hs-identifier hs-var">tmp</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF64"><span class="hs-identifier hs-var">FF64</span></a></span><span>
</span><span id="line-488"></span><span>    </span><span class="hs-keyword">let</span><span>
</span><span id="line-489"></span><span>        </span><span id="local-6989586621681033641"><span class="annot"><span class="annottext">promote :: Reg -&gt; Instr
</span><a href="#local-6989586621681033641"><span class="hs-identifier hs-var hs-var">promote</span></a></span></span><span> </span><span id="local-6989586621681033640"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033640"><span class="hs-identifier hs-var">x</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Format -&gt; Reg -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#FxTOy"><span class="hs-identifier hs-var">FxTOy</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF32"><span class="hs-identifier hs-var">FF32</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF64"><span class="hs-identifier hs-var">FF64</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033640"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033642"><span class="hs-identifier hs-var">tmp</span></a></span><span>
</span><span id="line-490"></span><span>
</span><span id="line-491"></span><span>        </span><span id="local-6989586621681033638"><span class="annot"><span class="annottext">pk1 :: CmmType
</span><a href="#local-6989586621681033638"><span class="hs-identifier hs-var hs-var">pk1</span></a></span></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; CmmExpr -&gt; CmmType
</span><a href="GHC.Cmm.Expr.html#cmmExprType"><span class="hs-identifier hs-var">cmmExprType</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681033647"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033649"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-492"></span><span>        </span><span id="local-6989586621681033636"><span class="annot"><span class="annottext">pk2 :: CmmType
</span><a href="#local-6989586621681033636"><span class="hs-identifier hs-var hs-var">pk2</span></a></span></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; CmmExpr -&gt; CmmType
</span><a href="GHC.Cmm.Expr.html#cmmExprType"><span class="hs-identifier hs-var">cmmExprType</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681033647"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033648"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-493"></span><span>
</span><span id="line-494"></span><span>        </span><span id="local-6989586621681033634"><span class="annot"><span class="annottext">code__2 :: Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033634"><span class="hs-identifier hs-var hs-var">code__2</span></a></span></span><span> </span><span id="local-6989586621681033633"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033633"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-495"></span><span>                </span><span class="hs-keyword">if</span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681033638"><span class="hs-identifier hs-var">pk1</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType -&gt; CmmType -&gt; Bool
</span><a href="GHC.Cmm.Type.html#cmmEqType"><span class="hs-operator hs-var">`cmmEqType`</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681033636"><span class="hs-identifier hs-var">pk2</span></a></span><span> </span><span class="hs-keyword">then</span><span>
</span><span id="line-496"></span><span>                    </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033645"><span class="hs-identifier hs-var">code1</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033643"><span class="hs-identifier hs-var">code2</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span>
</span><span id="line-497"></span><span>                    </span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; Reg -&gt; Reg -&gt; Instr
</span><a href="#local-6989586621681033650"><span class="hs-identifier hs-var">instr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width -&gt; Format
</span><a href="GHC.CmmToAsm.Format.html#floatFormat"><span class="hs-identifier hs-var">floatFormat</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033651"><span class="hs-identifier hs-var">pk</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033646"><span class="hs-identifier hs-var">src1</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033644"><span class="hs-identifier hs-var">src2</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033633"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-498"></span><span>                </span><span class="hs-keyword">else</span><span> </span><span class="hs-keyword">if</span><span> </span><span class="annot"><span class="annottext">CmmType -&gt; Width
</span><a href="GHC.Cmm.Type.html#typeWidth"><span class="hs-identifier hs-var">typeWidth</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681033638"><span class="hs-identifier hs-var">pk1</span></a></span><span> </span><span class="annot"><span class="annottext">Width -&gt; Width -&gt; Bool
forall a. Eq a =&gt; a -&gt; a -&gt; Bool
</span><span class="hs-operator hs-var">==</span></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W32"><span class="hs-identifier hs-var">W32</span></a></span><span> </span><span class="hs-keyword">then</span><span>
</span><span id="line-499"></span><span>                    </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033645"><span class="hs-identifier hs-var">code1</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Instr
</span><a href="#local-6989586621681033641"><span class="hs-identifier hs-var">promote</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033646"><span class="hs-identifier hs-var">src1</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033643"><span class="hs-identifier hs-var">code2</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span>
</span><span id="line-500"></span><span>                    </span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; Reg -&gt; Reg -&gt; Instr
</span><a href="#local-6989586621681033650"><span class="hs-identifier hs-var">instr</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF64"><span class="hs-identifier hs-var">FF64</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033642"><span class="hs-identifier hs-var">tmp</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033644"><span class="hs-identifier hs-var">src2</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033633"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-501"></span><span>                </span><span class="hs-keyword">else</span><span>
</span><span id="line-502"></span><span>                    </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033645"><span class="hs-identifier hs-var">code1</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033643"><span class="hs-identifier hs-var">code2</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Instr
</span><a href="#local-6989586621681033641"><span class="hs-identifier hs-var">promote</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033644"><span class="hs-identifier hs-var">src2</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span>
</span><span id="line-503"></span><span>                    </span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; Reg -&gt; Reg -&gt; Instr
</span><a href="#local-6989586621681033650"><span class="hs-identifier hs-var">instr</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF64"><span class="hs-identifier hs-var">FF64</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033646"><span class="hs-identifier hs-var">src1</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033642"><span class="hs-identifier hs-var">tmp</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033633"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-504"></span><span>    </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; InstrBlock) -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-var">Any</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmType -&gt; Format
</span><a href="GHC.CmmToAsm.Format.html#cmmTypeFormat"><span class="hs-identifier hs-var">cmmTypeFormat</span></a></span><span> </span><span class="annot"><span class="annottext">(CmmType -&gt; Format) -&gt; CmmType -&gt; Format
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="hs-keyword">if</span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681033638"><span class="hs-identifier hs-var">pk1</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType -&gt; CmmType -&gt; Bool
</span><a href="GHC.Cmm.Type.html#cmmEqType"><span class="hs-operator hs-var">`cmmEqType`</span></a></span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681033636"><span class="hs-identifier hs-var">pk2</span></a></span><span> </span><span class="hs-keyword">then</span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681033638"><span class="hs-identifier hs-var">pk1</span></a></span><span> </span><span class="hs-keyword">else</span><span> </span><span class="annot"><span class="annottext">Width -&gt; CmmType
</span><a href="GHC.Cmm.Type.html#cmmFloat"><span class="hs-identifier hs-var">cmmFloat</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="GHC.Cmm.Type.html#W64"><span class="hs-identifier hs-var">W64</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-505"></span><span>                </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033634"><span class="hs-identifier hs-var">code__2</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-506"></span><span>
</span><span id="line-507"></span><span>
</span><span id="line-508"></span><span>
</span><span id="line-509"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialUCode"><span class="hs-identifier hs-type">trivialUCode</span></a></span><span>
</span><span id="line-510"></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span>
</span><span id="line-511"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Instr.html#RI"><span class="hs-identifier hs-type">RI</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-512"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span>
</span><span id="line-513"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Register"><span class="hs-identifier hs-type">Register</span></a></span><span>
</span><span id="line-514"></span><span>
</span><span id="line-515"></span><span id="trivialUCode"><span class="annot"><span class="annottext">trivialUCode :: Format -&gt; (RI -&gt; Reg -&gt; Instr) -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialUCode"><span class="hs-identifier hs-var hs-var">trivialUCode</span></a></span></span><span> </span><span id="local-6989586621681033628"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681033628"><span class="hs-identifier hs-var">format</span></a></span></span><span> </span><span id="local-6989586621681033627"><span class="annot"><span class="annottext">RI -&gt; Reg -&gt; Instr
</span><a href="#local-6989586621681033627"><span class="hs-identifier hs-var">instr</span></a></span></span><span> </span><span id="local-6989586621681033626"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033626"><span class="hs-identifier hs-var">x</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-516"></span><span>    </span><span class="hs-special">(</span><span id="local-6989586621681033625"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033625"><span class="hs-identifier hs-var">src</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033624"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033624"><span class="hs-identifier hs-var">code</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033626"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-517"></span><span>    </span><span class="hs-keyword">let</span><span>
</span><span id="line-518"></span><span>        </span><span id="local-6989586621681033623"><span class="annot"><span class="annottext">code__2 :: Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033623"><span class="hs-identifier hs-var hs-var">code__2</span></a></span></span><span> </span><span id="local-6989586621681033622"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033622"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033624"><span class="hs-identifier hs-var">code</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span> </span><span class="annot"><span class="annottext">RI -&gt; Reg -&gt; Instr
</span><a href="#local-6989586621681033627"><span class="hs-identifier hs-var">instr</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIReg"><span class="hs-identifier hs-var">RIReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033625"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033622"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-519"></span><span>    </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; InstrBlock) -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-var">Any</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681033628"><span class="hs-identifier hs-var">format</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033623"><span class="hs-identifier hs-var">code__2</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-520"></span><span>
</span><span id="line-521"></span><span>
</span><span id="line-522"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialUFCode"><span class="hs-identifier hs-type">trivialUFCode</span></a></span><span>
</span><span id="line-523"></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Format.html#Format"><span class="hs-identifier hs-type">Format</span></a></span><span>
</span><span id="line-524"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Platform.Reg.html#Reg"><span class="hs-identifier hs-type">Reg</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Instr.html#Instr"><span class="hs-identifier hs-type">Instr</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-525"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span>
</span><span id="line-526"></span><span>        </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Register"><span class="hs-identifier hs-type">Register</span></a></span><span>
</span><span id="line-527"></span><span>
</span><span id="line-528"></span><span id="trivialUFCode"><span class="annot"><span class="annottext">trivialUFCode :: Format -&gt; (Reg -&gt; Reg -&gt; Instr) -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#trivialUFCode"><span class="hs-identifier hs-var hs-var">trivialUFCode</span></a></span></span><span> </span><span id="local-6989586621681033621"><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681033621"><span class="hs-identifier hs-var">pk</span></a></span></span><span> </span><span id="local-6989586621681033620"><span class="annot"><span class="annottext">Reg -&gt; Reg -&gt; Instr
</span><a href="#local-6989586621681033620"><span class="hs-identifier hs-var">instr</span></a></span></span><span> </span><span id="local-6989586621681033619"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033619"><span class="hs-identifier hs-var">x</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-529"></span><span>    </span><span class="hs-special">(</span><span id="local-6989586621681033618"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033618"><span class="hs-identifier hs-var">src</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033617"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033617"><span class="hs-identifier hs-var">code</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033619"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-530"></span><span>    </span><span class="hs-keyword">let</span><span>
</span><span id="line-531"></span><span>        </span><span id="local-6989586621681033616"><span class="annot"><span class="annottext">code__2 :: Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033616"><span class="hs-identifier hs-var hs-var">code__2</span></a></span></span><span> </span><span id="local-6989586621681033615"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033615"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033617"><span class="hs-identifier hs-var">code</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; Reg -&gt; Instr
</span><a href="#local-6989586621681033620"><span class="hs-identifier hs-var">instr</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033618"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033615"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-532"></span><span>    </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; InstrBlock) -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-var">Any</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681033621"><span class="hs-identifier hs-var">pk</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033616"><span class="hs-identifier hs-var">code__2</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-533"></span><span>
</span><span id="line-534"></span><span>
</span><span id="line-535"></span><span>
</span><span id="line-536"></span><span>
</span><span id="line-537"></span><span class="hs-comment">-- Coercions -------------------------------------------------------------------</span><span>
</span><span id="line-538"></span><span>
</span><span id="line-539"></span><span class="hs-comment">-- | Coerce a integer value to floating point</span><span>
</span><span id="line-540"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#coerceInt2FP"><span class="hs-identifier hs-type">coerceInt2FP</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Type.html#Width"><span class="hs-identifier hs-type">Width</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Type.html#Width"><span class="hs-identifier hs-type">Width</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Register"><span class="hs-identifier hs-type">Register</span></a></span><span>
</span><span id="line-541"></span><span id="coerceInt2FP"><span class="annot"><span class="annottext">coerceInt2FP :: Width -&gt; Width -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#coerceInt2FP"><span class="hs-identifier hs-var hs-var">coerceInt2FP</span></a></span></span><span> </span><span id="local-6989586621681033614"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033614"><span class="hs-identifier hs-var">width1</span></a></span></span><span> </span><span id="local-6989586621681033613"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033613"><span class="hs-identifier hs-var">width2</span></a></span></span><span> </span><span id="local-6989586621681033612"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033612"><span class="hs-identifier hs-var">x</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-542"></span><span>    </span><span class="hs-special">(</span><span id="local-6989586621681033611"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033611"><span class="hs-identifier hs-var">src</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033610"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033610"><span class="hs-identifier hs-var">code</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033612"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-543"></span><span>    </span><span class="hs-keyword">let</span><span>
</span><span id="line-544"></span><span>        </span><span id="local-6989586621681033605"><span class="annot"><span class="annottext">code__2 :: Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033605"><span class="hs-identifier hs-var hs-var">code__2</span></a></span></span><span> </span><span id="local-6989586621681033604"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033604"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033610"><span class="hs-identifier hs-var">code</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span> </span><span class="hs-special">[</span><span>
</span><span id="line-545"></span><span>            </span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; AddrMode -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#ST"><span class="hs-identifier hs-var">ST</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width -&gt; Format
</span><a href="GHC.CmmToAsm.Format.html#intFormat"><span class="hs-identifier hs-var">intFormat</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033614"><span class="hs-identifier hs-var">width1</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033611"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; AddrMode
</span><a href="GHC.CmmToAsm.SPARC.Stack.html#spRel"><span class="hs-identifier hs-var">spRel</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-glyph">-</span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">2</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">,</span><span>
</span><span id="line-546"></span><span>            </span><span class="annot"><span class="annottext">Format -&gt; AddrMode -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#LD"><span class="hs-identifier hs-var">LD</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width -&gt; Format
</span><a href="GHC.CmmToAsm.Format.html#intFormat"><span class="hs-identifier hs-var">intFormat</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033614"><span class="hs-identifier hs-var">width1</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; AddrMode
</span><a href="GHC.CmmToAsm.SPARC.Stack.html#spRel"><span class="hs-identifier hs-var">spRel</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-glyph">-</span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">2</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033604"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-547"></span><span>            </span><span class="annot"><span class="annottext">Format -&gt; Format -&gt; Reg -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#FxTOy"><span class="hs-identifier hs-var">FxTOy</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width -&gt; Format
</span><a href="GHC.CmmToAsm.Format.html#intFormat"><span class="hs-identifier hs-var">intFormat</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033614"><span class="hs-identifier hs-var">width1</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width -&gt; Format
</span><a href="GHC.CmmToAsm.Format.html#floatFormat"><span class="hs-identifier hs-var">floatFormat</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033613"><span class="hs-identifier hs-var">width2</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033604"><span class="hs-identifier hs-var">dst</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033604"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-548"></span><span>    </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; InstrBlock) -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-var">Any</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width -&gt; Format
</span><a href="GHC.CmmToAsm.Format.html#floatFormat"><span class="hs-identifier hs-var">floatFormat</span></a></span><span> </span><span class="annot"><span class="annottext">(Width -&gt; Format) -&gt; Width -&gt; Format
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033613"><span class="hs-identifier hs-var">width2</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033605"><span class="hs-identifier hs-var">code__2</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-549"></span><span>
</span><span id="line-550"></span><span>
</span><span id="line-551"></span><span>
</span><span id="line-552"></span><span class="hs-comment">-- | Coerce a floating point value to integer</span><span>
</span><span id="line-553"></span><span class="hs-comment">--</span><span>
</span><span id="line-554"></span><span class="hs-comment">--   NOTE: On sparc v9 there are no instructions to move a value from an</span><span>
</span><span id="line-555"></span><span class="hs-comment">--         FP register directly to an int register, so we have to use a load/store.</span><span>
</span><span id="line-556"></span><span class="hs-comment">--</span><span>
</span><span id="line-557"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#coerceFP2Int"><span class="hs-identifier hs-type">coerceFP2Int</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Type.html#Width"><span class="hs-identifier hs-type">Width</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Type.html#Width"><span class="hs-identifier hs-type">Width</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Register"><span class="hs-identifier hs-type">Register</span></a></span><span>
</span><span id="line-558"></span><span id="coerceFP2Int"><span class="annot"><span class="annottext">coerceFP2Int :: Width -&gt; Width -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#coerceFP2Int"><span class="hs-identifier hs-var hs-var">coerceFP2Int</span></a></span></span><span> </span><span id="local-6989586621681033601"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033601"><span class="hs-identifier hs-var">width1</span></a></span></span><span> </span><span id="local-6989586621681033600"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033600"><span class="hs-identifier hs-var">width2</span></a></span></span><span> </span><span id="local-6989586621681033599"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033599"><span class="hs-identifier hs-var">x</span></a></span></span><span>
</span><span id="line-559"></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>   </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681033598"><span class="annot"><span class="annottext">fformat1 :: Format
</span><a href="#local-6989586621681033598"><span class="hs-identifier hs-var hs-var">fformat1</span></a></span></span><span>      </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Width -&gt; Format
</span><a href="GHC.CmmToAsm.Format.html#floatFormat"><span class="hs-identifier hs-var">floatFormat</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033601"><span class="hs-identifier hs-var">width1</span></a></span><span>
</span><span id="line-560"></span><span>            </span><span id="local-6989586621681033597"><span class="annot"><span class="annottext">fformat2 :: Format
</span><a href="#local-6989586621681033597"><span class="hs-identifier hs-var hs-var">fformat2</span></a></span></span><span>      </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Width -&gt; Format
</span><a href="GHC.CmmToAsm.Format.html#floatFormat"><span class="hs-identifier hs-var">floatFormat</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033600"><span class="hs-identifier hs-var">width2</span></a></span><span>
</span><span id="line-561"></span><span>
</span><span id="line-562"></span><span>            </span><span id="local-6989586621681033596"><span class="annot"><span class="annottext">iformat2 :: Format
</span><a href="#local-6989586621681033596"><span class="hs-identifier hs-var hs-var">iformat2</span></a></span></span><span>      </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Width -&gt; Format
</span><a href="GHC.CmmToAsm.Format.html#intFormat"><span class="hs-identifier hs-var">intFormat</span></a></span><span>   </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681033600"><span class="hs-identifier hs-var">width2</span></a></span><span>
</span><span id="line-563"></span><span>
</span><span id="line-564"></span><span>        </span><span class="hs-special">(</span><span id="local-6989586621681033595"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033595"><span class="hs-identifier hs-var">fsrc</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033594"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033594"><span class="hs-identifier hs-var">code</span></a></span></span><span class="hs-special">)</span><span>    </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033599"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-565"></span><span>        </span><span id="local-6989586621681033593"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033593"><span class="hs-identifier hs-var">fdst</span></a></span></span><span>            </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Format -&gt; NatM Reg
</span><a href="GHC.CmmToAsm.Monad.html#getNewRegNat"><span class="hs-identifier hs-var">getNewRegNat</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681033597"><span class="hs-identifier hs-var">fformat2</span></a></span><span>
</span><span id="line-566"></span><span>
</span><span id="line-567"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681033588"><span class="annot"><span class="annottext">code2 :: Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033588"><span class="hs-identifier hs-var hs-var">code2</span></a></span></span><span> </span><span id="local-6989586621681033587"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033587"><span class="hs-identifier hs-var">dst</span></a></span></span><span>
</span><span id="line-568"></span><span>                </span><span class="hs-glyph">=</span><span>       </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033594"><span class="hs-identifier hs-var">code</span></a></span><span>
</span><span id="line-569"></span><span>                </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span>
</span><span id="line-570"></span><span>                        </span><span class="hs-comment">-- convert float to int format, leaving it in a float reg.</span><span>
</span><span id="line-571"></span><span>                        </span><span class="hs-special">[</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Format -&gt; Reg -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#FxTOy"><span class="hs-identifier hs-var">FxTOy</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681033598"><span class="hs-identifier hs-var">fformat1</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681033596"><span class="hs-identifier hs-var">iformat2</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033595"><span class="hs-identifier hs-var">fsrc</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033593"><span class="hs-identifier hs-var">fdst</span></a></span><span>
</span><span id="line-572"></span><span>
</span><span id="line-573"></span><span>                        </span><span class="hs-comment">-- store the int into mem, then load it back to move</span><span>
</span><span id="line-574"></span><span>                        </span><span class="hs-comment">--      it into an actual int reg.</span><span>
</span><span id="line-575"></span><span>                        </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Format -&gt; Reg -&gt; AddrMode -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#ST"><span class="hs-identifier hs-var">ST</span></a></span><span>    </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681033597"><span class="hs-identifier hs-var">fformat2</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033593"><span class="hs-identifier hs-var">fdst</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; AddrMode
</span><a href="GHC.CmmToAsm.SPARC.Stack.html#spRel"><span class="hs-identifier hs-var">spRel</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-glyph">-</span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">2</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-576"></span><span>                        </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Format -&gt; AddrMode -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#LD"><span class="hs-identifier hs-var">LD</span></a></span><span>    </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681033596"><span class="hs-identifier hs-var">iformat2</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; AddrMode
</span><a href="GHC.CmmToAsm.SPARC.Stack.html#spRel"><span class="hs-identifier hs-var">spRel</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-glyph">-</span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">2</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033587"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-577"></span><span>
</span><span id="line-578"></span><span>        </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; InstrBlock) -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-var">Any</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="#local-6989586621681033596"><span class="hs-identifier hs-var">iformat2</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033588"><span class="hs-identifier hs-var">code2</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-579"></span><span>
</span><span id="line-580"></span><span>
</span><span id="line-581"></span><span class="hs-comment">-- | Coerce a double precision floating point value to single precision.</span><span>
</span><span id="line-582"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#coerceDbl2Flt"><span class="hs-identifier hs-type">coerceDbl2Flt</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Register"><span class="hs-identifier hs-type">Register</span></a></span><span>
</span><span id="line-583"></span><span id="coerceDbl2Flt"><span class="annot"><span class="annottext">coerceDbl2Flt :: CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#coerceDbl2Flt"><span class="hs-identifier hs-var hs-var">coerceDbl2Flt</span></a></span></span><span> </span><span id="local-6989586621681033586"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033586"><span class="hs-identifier hs-var">x</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-584"></span><span>    </span><span class="hs-special">(</span><span id="local-6989586621681033585"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033585"><span class="hs-identifier hs-var">src</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033584"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033584"><span class="hs-identifier hs-var">code</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033586"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-585"></span><span>    </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; InstrBlock) -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-var">Any</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF32"><span class="hs-identifier hs-var">FF32</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span id="local-6989586621681033583"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033583"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033584"><span class="hs-identifier hs-var">code</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span> </span><span class="annot"><span class="annottext">Format -&gt; Format -&gt; Reg -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#FxTOy"><span class="hs-identifier hs-var">FxTOy</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF64"><span class="hs-identifier hs-var">FF64</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF32"><span class="hs-identifier hs-var">FF32</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033585"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033583"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-586"></span><span>
</span><span id="line-587"></span><span>
</span><span id="line-588"></span><span class="hs-comment">-- | Coerce a single precision floating point value to double precision</span><span>
</span><span id="line-589"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#coerceFlt2Dbl"><span class="hs-identifier hs-type">coerceFlt2Dbl</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Register"><span class="hs-identifier hs-type">Register</span></a></span><span>
</span><span id="line-590"></span><span id="coerceFlt2Dbl"><span class="annot"><span class="annottext">coerceFlt2Dbl :: CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#coerceFlt2Dbl"><span class="hs-identifier hs-var hs-var">coerceFlt2Dbl</span></a></span></span><span> </span><span id="local-6989586621681033582"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033582"><span class="hs-identifier hs-var">x</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-591"></span><span>    </span><span class="hs-special">(</span><span id="local-6989586621681033581"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033581"><span class="hs-identifier hs-var">src</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033580"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033580"><span class="hs-identifier hs-var">code</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033582"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-592"></span><span>    </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; InstrBlock) -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-var">Any</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF64"><span class="hs-identifier hs-var">FF64</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span id="local-6989586621681033579"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033579"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033580"><span class="hs-identifier hs-var">code</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; Instr -&gt; InstrBlock
forall a. OrdList a -&gt; a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#snocOL"><span class="hs-operator hs-var">`snocOL`</span></a></span><span> </span><span class="annot"><span class="annottext">Format -&gt; Format -&gt; Reg -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#FxTOy"><span class="hs-identifier hs-var">FxTOy</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF32"><span class="hs-identifier hs-var">FF32</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#FF64"><span class="hs-identifier hs-var">FF64</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033581"><span class="hs-identifier hs-var">src</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033579"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-593"></span><span>
</span><span id="line-594"></span><span>
</span><span id="line-595"></span><span>
</span><span id="line-596"></span><span>
</span><span id="line-597"></span><span class="hs-comment">-- Condition Codes -------------------------------------------------------------</span><span>
</span><span id="line-598"></span><span class="hs-comment">--</span><span>
</span><span id="line-599"></span><span class="hs-comment">-- Evaluate a comparison, and get the result into a register.</span><span>
</span><span id="line-600"></span><span class="hs-comment">--</span><span>
</span><span id="line-601"></span><span class="hs-comment">-- Do not fill the delay slots here. you will confuse the register allocator.</span><span>
</span><span id="line-602"></span><span class="hs-comment">--</span><span>
</span><span id="line-603"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condIntReg"><span class="hs-identifier hs-type">condIntReg</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Cond.html#Cond"><span class="hs-identifier hs-type">Cond</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Register"><span class="hs-identifier hs-type">Register</span></a></span><span>
</span><span id="line-604"></span><span id="condIntReg"><span class="annot"><span class="annottext">condIntReg :: Cond -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condIntReg"><span class="hs-identifier hs-var hs-var">condIntReg</span></a></span></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#EQQ"><span class="hs-identifier hs-var">EQQ</span></a></span><span> </span><span id="local-6989586621681033578"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033578"><span class="hs-identifier hs-var">x</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmLit"><span class="hs-identifier hs-type">CmmLit</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmInt"><span class="hs-identifier hs-type">CmmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Integer
</span><span class="hs-number">0</span></span><span> </span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-605"></span><span>    </span><span class="hs-special">(</span><span id="local-6989586621681033577"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033577"><span class="hs-identifier hs-var">src</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033576"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033576"><span class="hs-identifier hs-var">code</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033578"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-606"></span><span>    </span><span class="hs-keyword">let</span><span>
</span><span id="line-607"></span><span>        </span><span id="local-6989586621681033573"><span class="annot"><span class="annottext">code__2 :: Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033573"><span class="hs-identifier hs-var hs-var">code__2</span></a></span></span><span> </span><span id="local-6989586621681033572"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033572"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033576"><span class="hs-identifier hs-var">code</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span> </span><span class="hs-special">[</span><span>
</span><span id="line-608"></span><span>            </span><span class="annot"><span class="annottext">Bool -&gt; Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SUB"><span class="hs-identifier hs-var">SUB</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIReg"><span class="hs-identifier hs-var">RIReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033577"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-609"></span><span>            </span><span class="annot"><span class="annottext">Bool -&gt; Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SUB"><span class="hs-identifier hs-var">SUB</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIImm"><span class="hs-identifier hs-var">RIImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-glyph">-</span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033572"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-610"></span><span>    </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; InstrBlock) -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-var">Any</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033573"><span class="hs-identifier hs-var">code__2</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-611"></span><span>
</span><span id="line-612"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condIntReg"><span class="hs-identifier hs-var">condIntReg</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#EQQ"><span class="hs-identifier hs-var">EQQ</span></a></span><span> </span><span id="local-6989586621681033571"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033571"><span class="hs-identifier hs-var">x</span></a></span></span><span> </span><span id="local-6989586621681033570"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033570"><span class="hs-identifier hs-var">y</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-613"></span><span>    </span><span class="hs-special">(</span><span id="local-6989586621681033569"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033569"><span class="hs-identifier hs-var">src1</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033568"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033568"><span class="hs-identifier hs-var">code1</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033571"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-614"></span><span>    </span><span class="hs-special">(</span><span id="local-6989586621681033567"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033567"><span class="hs-identifier hs-var">src2</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033566"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033566"><span class="hs-identifier hs-var">code2</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033570"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-615"></span><span>    </span><span class="hs-keyword">let</span><span>
</span><span id="line-616"></span><span>        </span><span id="local-6989586621681033563"><span class="annot"><span class="annottext">code__2 :: Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033563"><span class="hs-identifier hs-var hs-var">code__2</span></a></span></span><span> </span><span id="local-6989586621681033562"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033562"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033568"><span class="hs-identifier hs-var">code1</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033566"><span class="hs-identifier hs-var">code2</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span> </span><span class="hs-special">[</span><span>
</span><span id="line-617"></span><span>            </span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#XOR"><span class="hs-identifier hs-var">XOR</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033569"><span class="hs-identifier hs-var">src1</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIReg"><span class="hs-identifier hs-var">RIReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033567"><span class="hs-identifier hs-var">src2</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033562"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-618"></span><span>            </span><span class="annot"><span class="annottext">Bool -&gt; Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SUB"><span class="hs-identifier hs-var">SUB</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIReg"><span class="hs-identifier hs-var">RIReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033562"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-619"></span><span>            </span><span class="annot"><span class="annottext">Bool -&gt; Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SUB"><span class="hs-identifier hs-var">SUB</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIImm"><span class="hs-identifier hs-var">RIImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-glyph">-</span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033562"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-620"></span><span>    </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; InstrBlock) -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-var">Any</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033563"><span class="hs-identifier hs-var">code__2</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-621"></span><span>
</span><span id="line-622"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condIntReg"><span class="hs-identifier hs-var">condIntReg</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#NE"><span class="hs-identifier hs-var">NE</span></a></span><span> </span><span id="local-6989586621681033561"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033561"><span class="hs-identifier hs-var">x</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmLit"><span class="hs-identifier hs-type">CmmLit</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmInt"><span class="hs-identifier hs-type">CmmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Integer
</span><span class="hs-number">0</span></span><span> </span><span class="annot"><span class="annottext">Width
</span><span class="hs-identifier">_</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-623"></span><span>    </span><span class="hs-special">(</span><span id="local-6989586621681033560"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033560"><span class="hs-identifier hs-var">src</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033559"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033559"><span class="hs-identifier hs-var">code</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033561"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-624"></span><span>    </span><span class="hs-keyword">let</span><span>
</span><span id="line-625"></span><span>        </span><span id="local-6989586621681033558"><span class="annot"><span class="annottext">code__2 :: Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033558"><span class="hs-identifier hs-var hs-var">code__2</span></a></span></span><span> </span><span id="local-6989586621681033557"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033557"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033559"><span class="hs-identifier hs-var">code</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span> </span><span class="hs-special">[</span><span>
</span><span id="line-626"></span><span>            </span><span class="annot"><span class="annottext">Bool -&gt; Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SUB"><span class="hs-identifier hs-var">SUB</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIReg"><span class="hs-identifier hs-var">RIReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033560"><span class="hs-identifier hs-var">src</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-627"></span><span>            </span><span class="annot"><span class="annottext">Bool -&gt; Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#ADD"><span class="hs-identifier hs-var">ADD</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIImm"><span class="hs-identifier hs-var">RIImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033557"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-628"></span><span>    </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; InstrBlock) -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-var">Any</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033558"><span class="hs-identifier hs-var">code__2</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-629"></span><span>
</span><span id="line-630"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condIntReg"><span class="hs-identifier hs-var">condIntReg</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#NE"><span class="hs-identifier hs-var">NE</span></a></span><span> </span><span id="local-6989586621681033556"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033556"><span class="hs-identifier hs-var">x</span></a></span></span><span> </span><span id="local-6989586621681033555"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033555"><span class="hs-identifier hs-var">y</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-631"></span><span>    </span><span class="hs-special">(</span><span id="local-6989586621681033554"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033554"><span class="hs-identifier hs-var">src1</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033553"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033553"><span class="hs-identifier hs-var">code1</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033556"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-632"></span><span>    </span><span class="hs-special">(</span><span id="local-6989586621681033552"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033552"><span class="hs-identifier hs-var">src2</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681033551"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033551"><span class="hs-identifier hs-var">code2</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; NatM (Reg, InstrBlock)
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#getSomeReg"><span class="hs-identifier hs-var">getSomeReg</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033555"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-633"></span><span>    </span><span class="hs-keyword">let</span><span>
</span><span id="line-634"></span><span>        </span><span id="local-6989586621681033550"><span class="annot"><span class="annottext">code__2 :: Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033550"><span class="hs-identifier hs-var hs-var">code__2</span></a></span></span><span> </span><span id="local-6989586621681033549"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033549"><span class="hs-identifier hs-var">dst</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033553"><span class="hs-identifier hs-var">code1</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033551"><span class="hs-identifier hs-var">code2</span></a></span><span> </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span> </span><span class="hs-special">[</span><span>
</span><span id="line-635"></span><span>            </span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#XOR"><span class="hs-identifier hs-var">XOR</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033554"><span class="hs-identifier hs-var">src1</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIReg"><span class="hs-identifier hs-var">RIReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033552"><span class="hs-identifier hs-var">src2</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033549"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-636"></span><span>            </span><span class="annot"><span class="annottext">Bool -&gt; Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#SUB"><span class="hs-identifier hs-var">SUB</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Reg -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIReg"><span class="hs-identifier hs-var">RIReg</span></a></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033549"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-637"></span><span>            </span><span class="annot"><span class="annottext">Bool -&gt; Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#ADD"><span class="hs-identifier hs-var">ADD</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">True</span></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIImm"><span class="hs-identifier hs-var">RIImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033549"><span class="hs-identifier hs-var">dst</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-638"></span><span>    </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; InstrBlock) -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-var">Any</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033550"><span class="hs-identifier hs-var">code__2</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-639"></span><span>
</span><span id="line-640"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condIntReg"><span class="hs-identifier hs-var">condIntReg</span></a></span><span> </span><span id="local-6989586621681033548"><span class="annot"><span class="annottext">Cond
</span><a href="#local-6989586621681033548"><span class="hs-identifier hs-var">cond</span></a></span></span><span> </span><span id="local-6989586621681033547"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033547"><span class="hs-identifier hs-var">x</span></a></span></span><span> </span><span id="local-6989586621681033546"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033546"><span class="hs-identifier hs-var">y</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-641"></span><span>    </span><span id="local-6989586621681033545"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681033545"><span class="hs-identifier hs-var">bid1</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">(BlockId -&gt; BlockId) -&gt; NatM BlockId -&gt; NatM BlockId
forall (m :: * -&gt; *) a1 r. Monad m =&gt; (a1 -&gt; r) -&gt; m a1 -&gt; m r
</span><a href="../../base/src/GHC.Base.html#liftM"><span class="hs-identifier hs-var">liftM</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span id="local-6989586621681033544"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681033544"><span class="hs-identifier hs-var">a</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; BlockId -&gt; BlockId
</span><span class="hs-identifier hs-var">seq</span></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681033544"><span class="hs-identifier hs-var">a</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681033544"><span class="hs-identifier hs-var">a</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">NatM BlockId
</span><a href="GHC.CmmToAsm.Monad.html#getBlockIdNat"><span class="hs-identifier hs-var">getBlockIdNat</span></a></span><span>
</span><span id="line-642"></span><span>    </span><span id="local-6989586621681033542"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681033542"><span class="hs-identifier hs-var">bid2</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">(BlockId -&gt; BlockId) -&gt; NatM BlockId -&gt; NatM BlockId
forall (m :: * -&gt; *) a1 r. Monad m =&gt; (a1 -&gt; r) -&gt; m a1 -&gt; m r
</span><a href="../../base/src/GHC.Base.html#liftM"><span class="hs-identifier hs-var">liftM</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span id="local-6989586621681033541"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681033541"><span class="hs-identifier hs-var">a</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; BlockId -&gt; BlockId
</span><span class="hs-identifier hs-var">seq</span></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681033541"><span class="hs-identifier hs-var">a</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681033541"><span class="hs-identifier hs-var">a</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">NatM BlockId
</span><a href="GHC.CmmToAsm.Monad.html#getBlockIdNat"><span class="hs-identifier hs-var">getBlockIdNat</span></a></span><span>
</span><span id="line-643"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#CondCode"><span class="hs-identifier hs-type">CondCode</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681033539"><span class="annot"><span class="annottext">Cond
</span><a href="#local-6989586621681033539"><span class="hs-identifier hs-var">cond</span></a></span></span><span> </span><span id="local-6989586621681033538"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033538"><span class="hs-identifier hs-var">cond_code</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM CondCode
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.CondCode.html#condIntCode"><span class="hs-identifier hs-var">condIntCode</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="#local-6989586621681033548"><span class="hs-identifier hs-var">cond</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033547"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033546"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-644"></span><span>    </span><span class="hs-keyword">let</span><span>
</span><span id="line-645"></span><span>        </span><span id="local-6989586621681033536"><span class="annot"><span class="annottext">code__2 :: Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033536"><span class="hs-identifier hs-var hs-var">code__2</span></a></span></span><span> </span><span id="local-6989586621681033535"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033535"><span class="hs-identifier hs-var">dst</span></a></span></span><span>
</span><span id="line-646"></span><span>         </span><span class="hs-glyph">=</span><span>      </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033538"><span class="hs-identifier hs-var">cond_code</span></a></span><span>
</span><span id="line-647"></span><span>          </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span>
</span><span id="line-648"></span><span>                </span><span class="hs-special">[</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; Bool -&gt; BlockId -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#BI"><span class="hs-identifier hs-var">BI</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="#local-6989586621681033539"><span class="hs-identifier hs-var">cond</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681033545"><span class="hs-identifier hs-var">bid1</span></a></span><span>
</span><span id="line-649"></span><span>                </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#NOP"><span class="hs-identifier hs-var">NOP</span></a></span><span>
</span><span id="line-650"></span><span>
</span><span id="line-651"></span><span>                </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#OR"><span class="hs-identifier hs-var">OR</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIImm"><span class="hs-identifier hs-var">RIImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033535"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-652"></span><span>                </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; Bool -&gt; BlockId -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#BI"><span class="hs-identifier hs-var">BI</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#ALWAYS"><span class="hs-identifier hs-var">ALWAYS</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681033542"><span class="hs-identifier hs-var">bid2</span></a></span><span>
</span><span id="line-653"></span><span>                </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#NOP"><span class="hs-identifier hs-var">NOP</span></a></span><span>
</span><span id="line-654"></span><span>
</span><span id="line-655"></span><span>                </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#NEWBLOCK"><span class="hs-identifier hs-var">NEWBLOCK</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681033545"><span class="hs-identifier hs-var">bid1</span></a></span><span>
</span><span id="line-656"></span><span>                </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#OR"><span class="hs-identifier hs-var">OR</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIImm"><span class="hs-identifier hs-var">RIImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033535"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-657"></span><span>                </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; Bool -&gt; BlockId -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#BI"><span class="hs-identifier hs-var">BI</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#ALWAYS"><span class="hs-identifier hs-var">ALWAYS</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681033542"><span class="hs-identifier hs-var">bid2</span></a></span><span>
</span><span id="line-658"></span><span>                </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#NOP"><span class="hs-identifier hs-var">NOP</span></a></span><span>
</span><span id="line-659"></span><span>
</span><span id="line-660"></span><span>                </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#NEWBLOCK"><span class="hs-identifier hs-var">NEWBLOCK</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681033542"><span class="hs-identifier hs-var">bid2</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-661"></span><span>
</span><span id="line-662"></span><span>    </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; InstrBlock) -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-var">Any</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033536"><span class="hs-identifier hs-var">code__2</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-663"></span><span>
</span><span id="line-664"></span><span>
</span><span id="line-665"></span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condFltReg"><span class="hs-identifier hs-type">condFltReg</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.Cond.html#Cond"><span class="hs-identifier hs-type">Cond</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.CmmToAsm.Monad.html#NatM"><span class="hs-identifier hs-type">NatM</span></a></span><span> </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Register"><span class="hs-identifier hs-type">Register</span></a></span><span>
</span><span id="line-666"></span><span id="condFltReg"><span class="annot"><span class="annottext">condFltReg :: Cond -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Gen32.html#condFltReg"><span class="hs-identifier hs-var hs-var">condFltReg</span></a></span></span><span> </span><span id="local-6989586621681033530"><span class="annot"><span class="annottext">Cond
</span><a href="#local-6989586621681033530"><span class="hs-identifier hs-var">cond</span></a></span></span><span> </span><span id="local-6989586621681033529"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033529"><span class="hs-identifier hs-var">x</span></a></span></span><span> </span><span id="local-6989586621681033528"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033528"><span class="hs-identifier hs-var">y</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-667"></span><span>    </span><span id="local-6989586621681033527"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681033527"><span class="hs-identifier hs-var">bid1</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">(BlockId -&gt; BlockId) -&gt; NatM BlockId -&gt; NatM BlockId
forall (m :: * -&gt; *) a1 r. Monad m =&gt; (a1 -&gt; r) -&gt; m a1 -&gt; m r
</span><a href="../../base/src/GHC.Base.html#liftM"><span class="hs-identifier hs-var">liftM</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span id="local-6989586621681033526"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681033526"><span class="hs-identifier hs-var">a</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; BlockId -&gt; BlockId
</span><span class="hs-identifier hs-var">seq</span></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681033526"><span class="hs-identifier hs-var">a</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681033526"><span class="hs-identifier hs-var">a</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">NatM BlockId
</span><a href="GHC.CmmToAsm.Monad.html#getBlockIdNat"><span class="hs-identifier hs-var">getBlockIdNat</span></a></span><span>
</span><span id="line-668"></span><span>    </span><span id="local-6989586621681033525"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681033525"><span class="hs-identifier hs-var">bid2</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">(BlockId -&gt; BlockId) -&gt; NatM BlockId -&gt; NatM BlockId
forall (m :: * -&gt; *) a1 r. Monad m =&gt; (a1 -&gt; r) -&gt; m a1 -&gt; m r
</span><a href="../../base/src/GHC.Base.html#liftM"><span class="hs-identifier hs-var">liftM</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-glyph">\</span><span id="local-6989586621681033524"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681033524"><span class="hs-identifier hs-var">a</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; BlockId -&gt; BlockId
</span><span class="hs-identifier hs-var">seq</span></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681033524"><span class="hs-identifier hs-var">a</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681033524"><span class="hs-identifier hs-var">a</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">NatM BlockId
</span><a href="GHC.CmmToAsm.Monad.html#getBlockIdNat"><span class="hs-identifier hs-var">getBlockIdNat</span></a></span><span>
</span><span id="line-669"></span><span>
</span><span id="line-670"></span><span>    </span><span class="annot"><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#CondCode"><span class="hs-identifier hs-type">CondCode</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681033523"><span class="annot"><span class="annottext">Cond
</span><a href="#local-6989586621681033523"><span class="hs-identifier hs-var">cond</span></a></span></span><span> </span><span id="local-6989586621681033522"><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033522"><span class="hs-identifier hs-var">cond_code</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; CmmExpr -&gt; CmmExpr -&gt; NatM CondCode
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.CondCode.html#condFltCode"><span class="hs-identifier hs-var">condFltCode</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="#local-6989586621681033530"><span class="hs-identifier hs-var">cond</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033529"><span class="hs-identifier hs-var">x</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681033528"><span class="hs-identifier hs-var">y</span></a></span><span>
</span><span id="line-671"></span><span>    </span><span class="hs-keyword">let</span><span>
</span><span id="line-672"></span><span>        </span><span id="local-6989586621681033520"><span class="annot"><span class="annottext">code__2 :: Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033520"><span class="hs-identifier hs-var hs-var">code__2</span></a></span></span><span> </span><span id="local-6989586621681033519"><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033519"><span class="hs-identifier hs-var">dst</span></a></span></span><span>
</span><span id="line-673"></span><span>         </span><span class="hs-glyph">=</span><span>      </span><span class="annot"><span class="annottext">InstrBlock
</span><a href="#local-6989586621681033522"><span class="hs-identifier hs-var">cond_code</span></a></span><span>
</span><span id="line-674"></span><span>          </span><span class="annot"><span class="annottext">InstrBlock -&gt; InstrBlock -&gt; InstrBlock
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-operator hs-var">`appOL`</span></a></span><span> </span><span class="annot"><span class="annottext">[Instr] -&gt; InstrBlock
forall a. [a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#toOL"><span class="hs-identifier hs-var">toOL</span></a></span><span>
</span><span id="line-675"></span><span>                </span><span class="hs-special">[</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#NOP"><span class="hs-identifier hs-var">NOP</span></a></span><span>
</span><span id="line-676"></span><span>                </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; Bool -&gt; BlockId -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#BF"><span class="hs-identifier hs-var">BF</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="#local-6989586621681033523"><span class="hs-identifier hs-var">cond</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681033527"><span class="hs-identifier hs-var">bid1</span></a></span><span>
</span><span id="line-677"></span><span>                </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#NOP"><span class="hs-identifier hs-var">NOP</span></a></span><span>
</span><span id="line-678"></span><span>
</span><span id="line-679"></span><span>                </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#OR"><span class="hs-identifier hs-var">OR</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIImm"><span class="hs-identifier hs-var">RIImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">0</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033519"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-680"></span><span>                </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; Bool -&gt; BlockId -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#BI"><span class="hs-identifier hs-var">BI</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#ALWAYS"><span class="hs-identifier hs-var">ALWAYS</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681033525"><span class="hs-identifier hs-var">bid2</span></a></span><span>
</span><span id="line-681"></span><span>                </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#NOP"><span class="hs-identifier hs-var">NOP</span></a></span><span>
</span><span id="line-682"></span><span>
</span><span id="line-683"></span><span>                </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#NEWBLOCK"><span class="hs-identifier hs-var">NEWBLOCK</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681033527"><span class="hs-identifier hs-var">bid1</span></a></span><span>
</span><span id="line-684"></span><span>                </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; Reg -&gt; RI -&gt; Reg -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#OR"><span class="hs-identifier hs-var">OR</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="GHC.CmmToAsm.SPARC.Regs.html#g0"><span class="hs-identifier hs-var">g0</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Imm -&gt; RI
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#RIImm"><span class="hs-identifier hs-var">RIImm</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Int -&gt; Imm
</span><a href="GHC.CmmToAsm.SPARC.Imm.html#ImmInt"><span class="hs-identifier hs-var">ImmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Int
</span><span class="hs-number">1</span></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Reg
</span><a href="#local-6989586621681033519"><span class="hs-identifier hs-var">dst</span></a></span><span>
</span><span id="line-685"></span><span>                </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Cond -&gt; Bool -&gt; BlockId -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#BI"><span class="hs-identifier hs-var">BI</span></a></span><span> </span><span class="annot"><span class="annottext">Cond
</span><a href="GHC.CmmToAsm.SPARC.Cond.html#ALWAYS"><span class="hs-identifier hs-var">ALWAYS</span></a></span><span> </span><span class="annot"><span class="annottext">Bool
</span><span class="hs-identifier hs-var">False</span></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681033525"><span class="hs-identifier hs-var">bid2</span></a></span><span>
</span><span id="line-686"></span><span>                </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#NOP"><span class="hs-identifier hs-var">NOP</span></a></span><span>
</span><span id="line-687"></span><span>
</span><span id="line-688"></span><span>                </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; Instr
</span><a href="GHC.CmmToAsm.SPARC.Instr.html#NEWBLOCK"><span class="hs-identifier hs-var">NEWBLOCK</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681033525"><span class="hs-identifier hs-var">bid2</span></a></span><span> </span><span class="hs-special">]</span><span>
</span><span id="line-689"></span><span>
</span><span id="line-690"></span><span>    </span><span class="annot"><span class="annottext">Register -&gt; NatM Register
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Format -&gt; (Reg -&gt; InstrBlock) -&gt; Register
</span><a href="GHC.CmmToAsm.SPARC.CodeGen.Base.html#Any"><span class="hs-identifier hs-var">Any</span></a></span><span> </span><span class="annot"><span class="annottext">Format
</span><a href="GHC.CmmToAsm.Format.html#II32"><span class="hs-identifier hs-var">II32</span></a></span><span> </span><span class="annot"><span class="annottext">Reg -&gt; InstrBlock
</span><a href="#local-6989586621681033520"><span class="hs-identifier hs-var">code__2</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-691"></span></pre></body></html>